fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG] 在和 mybatis-plus 合用时出错

Open zycgit opened this issue 5 months ago • 0 comments

问题描述

在和 mybatis-plus 合用时出错,换成 Jackson 就正常。

单独解析 options 列中的数据 fastjson 正常。

数据库中的数据 INSERT INTOmy_table (id, gmt_create, gmt_modified, owner_uid, project_uid, project_code, project_name, project_desc, project_status, project_mark, flow_check, flow_approve, flow_execute, options) VALUES ('5', '2025-04-25 18:33:19', '2025-04-25 18:33:19', '6258151610403310', '6258151610403310', 'a2httsutm28p', 'CloudDM Paroject', 'test project', 'NORMAL', 'CircleGray', 'Always', 'Enable', 'Manual', '{"errorStrategy":"NONE","retryCount":null,"retryWaitTime":null,"transactional":true}' ); INSERT INTO my_table (id, gmt_create, gmt_modified, owner_uid, project_uid, project_code, project_name, project_desc, project_status, project_mark, flow_check, flow_approve, flow_execute, options) VALUES ('7', '2025-04-29 15:42:30', '2025-04-29 15:42:30', '6258151610403310', '6258151610403310', 'ni64304j005e', 'CloudDM Paroject', 'test project 1', 'NORMAL', 'CircleGray', 'Always', 'Enable', 'Manual', '{"errorStrategy":"NONE","retryCount":null,"retryWaitTime":null,"snapshot":false,"transactional":false}' ); INSERT INTO my_table (id, gmt_create, gmt_modified, owner_uid, project_uid, project_code, project_name, project_desc, project_status, project_mark, flow_check, flow_approve, flow_execute, options) VALUES ('8', '2025-05-08 11:31:50', '2025-05-12 11:09:36', '6258151610403310', '3725641616909730', 'nv65r7o4o18o', 'ttt', 'tet', 'ARCHIVE', 'CircleGray', 'Always', 'Disable', 'Manual', '{"errorStrategy":"NONE","retryCount":null,"retryWaitTime":null,"snapshot":false,"transactional":false}' );

` @Getter @Setter @TableName(value = "dm_project") public class DmProjectDO {

@TableId(type = IdType.AUTO)
private Long                    id;

@TableField(insertStrategy = FieldStrategy.NOT_NULL, updateStrategy = FieldStrategy.NOT_NULL)
private Date                    gmtCreate;

@TableField(insertStrategy = FieldStrategy.NOT_NULL, updateStrategy = FieldStrategy.NOT_NULL)
private Date                    gmtModified;

@TableField("owner_uid")
private String                  ownerUid;

@TableField("project_uid")
private String                  projectUid;

@TableField("project_code")
private String                  projectCode;

@TableField("project_name")
private String                  projectName;

@TableField("project_desc")
private String                  projectDesc;

@TableField("project_status")
private ProjectStatus           projectStatus;

@TableField("project_mark")
private String                  projectMark;

@TableField("flow_check")
private DmChangeCheckStrategy   flowCheck;

@TableField("flow_approve")
private DmChangeApproveStrategy flowApprove;

@TableField("flow_execute")
private DmChangeExecStrategy    flowExecute;

@TableField(value = "options", typeHandler = JacksonTypeHandler.class)
private DmProjectOption         options;

} `

` @Getter @Setter public class DmProjectOption {

// exec default
private boolean       transactional;
private ErrorStrategy errorStrategy;
private Long          retryWaitTime;
private Long          retryCount;

// flow
private boolean       snapshot;

} `

重现步骤

报错信息

2025-05-12 11:09:45.661 ERROR 3396 --- [nio-8222-exec-5] c.c.c.c.w.g.e.GlobalExceptionHandler     : msg:JSONException: syntax error : f

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'options' from result set.  Cause: com.alibaba.fastjson.JSONException: syntax error : f
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:97)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)
	at com.sun.proxy.$Proxy83.selectOne(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:87)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:149)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:90)
	at com.sun.proxy.$Proxy109.queryByOwnerAndId(Unknown Source)
	at com.clougence.clouddm.console.web.service.project.impl.DmProjectServiceImpl.deleteProject(DmProjectServiceImpl.java:606)
	at com.clougence.clouddm.console.web.service.project.impl.DmProjectServiceImpl$$FastClassBySpringCGLIB$$f05a33ac.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
	at com.clougence.clouddm.console.web.service.project.impl.DmProjectServiceImpl$$EnhancerBySpringCGLIB$$ad560568.deleteProject(<generated>)
	at com.clougence.clouddm.console.web.controller.project.DmProjectController.projectDelete(DmProjectController.java:331)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:555)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
	at com.clougence.rdp.component.authcode.RdpRequestBodyFilter.doFilter(RdpRequestBodyFilter.java:33)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:750)
Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'options' from result set.  Cause: com.alibaba.fastjson.JSONException: syntax error : f
	at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:88)
	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getPropertyMappingValue(DefaultResultSetHandler.java:530)
	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyPropertyMappings(DefaultResultSetHandler.java:495)
	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:418)
	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:366)
Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'options' from result set.  Cause: com.alibaba.fastjson.JSONException: syntax error : f

	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:337)
	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:310)
	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:202)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:66)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:80)
	at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
	at com.sun.proxy.$Proxy183.query(Unknown Source)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:65)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110)
	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
	at com.sun.proxy.$Proxy182.query(Unknown Source)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75)
	at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)
	... 71 common frames omitted
Caused by: com.alibaba.fastjson.JSONException: syntax error : f
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:613)
Caused by: com.alibaba.fastjson.JSONException: syntax error : f

	at com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler.parse(FastjsonTypeHandler.java:46)
	at com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler.getNullableResult(AbstractJsonTypeHandler.java:81)
	at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:86)
	... 100 common frames omitted
Caused by: com.alibaba.fastjson2.JSONException: syntax error : f
	at com.alibaba.fastjson2.JSONReaderUTF16.readBoolValue(JSONReaderUTF16.java:5015)
Caused by: com.alibaba.fastjson2.JSONException: syntax error : f

	at com.alibaba.fastjson2.reader.FieldReaderBoolValueMethod.readFieldValue(FieldReaderBoolValueMethod.java:26)
	at com.alibaba.fastjson2.reader.ObjectReaderAdapter.readFieldValue(ObjectReaderAdapter.java:456)
	at com.alibaba.fastjson2.reader.ORG_1_5_DmProjectOption.readObject(Unknown Source)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:600)
	... 103 common frames omitted

zycgit avatar May 12 '25 03:05 zycgit