No suitable constructor found for type

No suitable constructor found for type

异常描述

[2018-09-02T11:52:35.038] ERROR [020-exec-5] c.t.util.ShopUtils[111] 反序列化序列化attributes,从Json到List报错
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.manager.SearchManager GoodsEntryResult]:cannotinstantiatefromJSONobject(needtoadd/enabletypeinformation?)at[Source:java.io.StringReader@2abaf651;line:1,column:3]atorg.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:746) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.ObjectMapper.readMapAndClose(ObjectMapper.java:2732) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1877) [jacksonmapperasl1.9.13.jar:1.9.13]atorg.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)[springcore4.0.5.RELEASE.jar:4.0.5.RELEASE]atorg.springframework.aop.framework.CglibAopProxy G o o d s E n t r y R e s u l t ] : c a n n o t i n s t a n t i a t e f r o m J S O N o b j e c t ( n e e d t o a d d / e n a b l e t y p e i n f o r m a t i o n ? ) a t [ S o u r c e : j a v a . i o . S t r i n g R e a d e r @ 2 a b a f 651 ; l i n e : 1 , c o l u m n : 3 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . J s o n M a p p i n g E x c e p t i o n . f r o m ( J s o n M a p p i n g E x c e p t i o n . j a v a : 163 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . d e s e r . B e a n D e s e r i a l i z e r . d e s e r i a l i z e F r o m O b j e c t U s i n g N o n D e f a u l t ( B e a n D e s e r i a l i z e r . j a v a : 746 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . d e s e r . B e a n D e s e r i a l i z e r . d e s e r i a l i z e F r o m O b j e c t ( B e a n D e s e r i a l i z e r . j a v a : 683 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . d e s e r . B e a n D e s e r i a l i z e r . d e s e r i a l i z e ( B e a n D e s e r i a l i z e r . j a v a : 580 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . d e s e r . s t d . C o l l e c t i o n D e s e r i a l i z e r . d e s e r i a l i z e ( C o l l e c t i o n D e s e r i a l i z e r . j a v a : 217 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . d e s e r . s t d . C o l l e c t i o n D e s e r i a l i z e r . d e s e r i a l i z e ( C o l l e c t i o n D e s e r i a l i z e r . j a v a : 194 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . d e s e r . s t d . C o l l e c t i o n D e s e r i a l i z e r . d e s e r i a l i z e ( C o l l e c t i o n D e s e r i a l i z e r . j a v a : 30 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . O b j e c t M a p p e r . r e a d M a p A n d C l o s e ( O b j e c t M a p p e r . j a v a : 2732 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . c o d e h a u s . j a c k s o n . m a p . O b j e c t M a p p e r . r e a d V a l u e ( O b j e c t M a p p e r . j a v a : 1877 )   [ j a c k s o n − m a p p e r − a s l − 1.9.13. j a r : 1.9.13 ] a t o r g . s p r i n g f r a m e w o r k . c g l i b . p r o x y . M e t h o d P r o x y . i n v o k e ( M e t h o d P r o x y . j a v a : 204 ) [ s p r i n g − c o r e − 4.0.5. R E L E A S E . j a r : 4.0.5. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . C g l i b A o p P r o x y CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708) [spring-aop-4.0.5.RELEASE.jar:4.0.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.0.5.RELEASE.jar:4.0.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) [spring-aop-4.0.5.RELEASE.jar:4.0.5.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) [spring-aop-4.0.5.RELEASE.jar:4.0.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.5.RELEASE.jar:4.0.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)[springaop4.0.5.RELEASE.jar:4.0.5.RELEASE]atcom.tqmall.tqmallstall.controller.trade.AppShoppingController D y n a m i c A d v i s e d I n t e r c e p t o r . i n t e r c e p t ( C g l i b A o p P r o x y . j a v a : 644 ) [ s p r i n g − a o p − 4.0.5. R E L E A S E . j a r : 4.0.5. R E L E A S E ] a t c o m . t q m a l l . t q m a l l s t a l l . c o n t r o l l e r . t r a d e . A p p S h o p p i n g C o n t r o l l e r EnhancerBySpringCGLIB E n h a n c e r B y S p r i n g C G L I B $1d68755d.myParts() [spring-core-4.0.5.RELEASE.jar:na]
at sun.reflect.GeneratedMethodAccessor2373.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_55]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_55]
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) [spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) [spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) [spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE]


异常分析

  • JSON序列化POJO对象时需要调用POJO的默认构造方法
  • 外部类与内部类,在序列化内部类报异常,提示找不到无参构造方法,显示添加构造方法后,再次调用依然报错
  • 内部类分为
    • 成员内部类:class 作为类的成员,内部类实例化时需要借助外部类
    • 静态内部类:static class ,内部类实例化时与外部类无区别
  • 序列化时调用内部类的无参构造方法,但此时无法找到该方法,所以报错

异常解决

  • 将成员内部类移到外层作为一个独立的POJO
  • 将成员内部类改为静态内部类

举一反三

  • 使用ssh框架,从Controller层向页面传值时,如果是通过局部内部类的方式,内部类的对象赋值在页面上无法获取

问题分析

  • 从异常信息上看涉及反射及代理模式,此时需要提供默认构造方法
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值