com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
出现这种问题的情况是由于JSON里面包含了实体没有的字段导致反序列化失败。
序列化的代码
@Override
public ResultDTO<HbZxVerifyStateDTO> getVerifyState(String type, String id) {
try {
String resultStr = webservice.getggStatus(DesHelper.DESEnCode(type, encryptKey),
DesHelper.DESEnCode(id, encryptKey), platformCode);
logger.debug("------------- getggStatus result is:" + resultStr);
//问题出现再下面的一行
HbZxVerifyStateDTO verifyStateDTO = JsonHelper.readValueCustom(resultStr, HbZxVerifyStateDTO.class);
ResultDTO<HbZxVerifyStateDTO> result = new ResultDTO<HbZxVerifyStateDTO>();
result.setSuccess(true);
result.setData(verifyStateDTO);
return result;
} catch (Exception e) {
throw new ServiceException("审核状态失败!", e);
}
}
报错信息
2019-07-03 11:15 DEBUG c.s.e.g.h.s.HbZxDockServiceImpl - ------------- getggStatus result is:{"yj":"公告字段scopeofbid为空,公告code=S1301000274001258001001无需审批核准备案的 ,不再推送监管部门.","bj":"2","shdw":{}}
2019-07-03 11:15 WARN c.s.f.m.c.BaseController - An Exception has been resolved by base exception handler:
com.sino.framework.exception.ServiceException: 审核状态失败!
at com.sino.ebid.gp.hbzx.service.HbZxDockServiceImpl.getVerifyState(HbZxDockServiceImpl.java:358)
at com.sino.ebid.gp.hbzx.service.HbZxDockServiceImpl$$FastClassBySpringCGLIB$$5ef0ccf4.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:72)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at com.sino.ebid.gp.hbzx.service.HbZxDockServiceImpl$$EnhancerBySpringCGLIB$$39f1b0ca.getVerifyState(<generated>)
at com.sino.ebid.hbzx.biz.HbZxQueryInfoBiz.getVerifyState(HbZxQueryInfoBiz.java:83)
at com.sino.ebid.hbzx.biz.HbZxQueryInfoBiz$$FastClassBySpringCGLIB$$d71df7fa.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:72)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at com.sino.ebid.hbzx.biz.HbZxQueryInfoBiz$$EnhancerBySpringCGLIB$$3c31459c.getVerifyState(<generated>)
at com.sino.ebid.hbzx.controller.HbZxQueryInfoController.getVerifyState(HbZxQueryInfoController.java:87)
at com.sino.ebid.hbzx.controller.HbZxQueryInfoController$$FastClassBySpringCGLIB$$9ba685b2.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:72)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at com.sino.ebid.hbzx.controller.HbZxQueryInfoController$$EnhancerBySpringCGLIB$$60d541c4.getVerifyState(<generated>)
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:497)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2503)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2492)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.UndeclaredThrowableException: null
at org.springframework.util.ReflectionUtils.handleReflectionException(ReflectionUtils.java:285)
at com.sino.framework.util.JsonHelper.readValueCustom(JsonHelper.java:63)
at com.sino.ebid.gp.hbzx.service.HbZxDockServiceImpl.getVerifyState(HbZxDockServiceImpl.java:352)
... 72 common frames omitted
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "shdw" (class com.sino.ebid.hbzx.dto.HbZxVerifyStateDTO), not marked as ignorable (2 known properties: "bj", "yj"])
at [Source: {"yj":"公告字段scopeofbid为空,公告code=S1301000274001258001001无需审批核准备案的 ,不再推送监管部门.","bj":"2","shdw":{}}; line: 1, column: 94] (through reference chain: com.sino.ebid.hbzx.dto.HbZxVerifyStateDTO["shdw"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:834)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1093)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1478)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1456)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:282)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2842)
at com.sino.framework.util.JsonHelper.readValueCustom(JsonHelper.java:61)
... 73 common frames omitted
Unrecognized field "shdw" (class com.sino.ebid.hbzx.dto.HbZxVerifyStateDTO)
由这个报错信息可以看出,我的HbZxVerifyStateDTO类中没有定义shdw这个属性,导致的序列化失败
解决
本来就是添加个字段的事情,可是因为我看错了
{"yj":"公告字段scopeofbid为空,公告code=S1301000274001258001001无需审批核准备案的 ,不再推送监管部门.","bj":"2","shdw":{}}
以至于shdw的属性数据类型选择错误,居然用ArrayList来接 -------》如果属性的类型不对,还会报其他类型的反序列化错误
正确的应该Object或者Map类的来接