No suitable constructor found for type

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mingyundezuoan/article/details/82587848

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 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 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 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层向页面传值时,如果是通过局部内部类的方式,内部类的对象赋值在页面上无法获取

问题分析

  • 从异常信息上看涉及反射及代理模式,此时需要提供默认构造方法

猜你喜欢

转载自blog.csdn.net/mingyundezuoan/article/details/82587848