springmvc使用jackson封装数据过程中遇到问题
首先这是在springmvc框架下使用jackson封装数据遇到的问题。
如果你遇到的异常跟我下面日志里的一样,请继续往下看。
这是一个jackson版本引起的问题,到maven仓库https://mvnrepository.com/search?q=jackson搜索jackson最新的版本就能解决问题了,亲测有效。
抛出异常日志
14-jul-2020 09:54:11.594 警告 [rmi tcp connection(19)-127.0.0.1] org.springframework.context.support.abstractapplicationcontext.refresh exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.beancreationexception: error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter': instantiation of bean failed; nested exception is org.springframework.beans.beaninstantiationexception: failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter]: constructor threw exception; nested exception is java.lang.noclassdeffounderror: com/fasterxml/jackson/databind/exc/invaliddefinitionexception
14-jul-2020 09:54:11.597 严重 [rmi tcp connection(19)-127.0.0.1] org.springframework.web.servlet.frameworkservlet.initservletbean context initialization failed
org.springframework.beans.factory.beancreationexception: error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter': instantiation of bean failed; nested exception is org.springframework.beans.beaninstantiationexception: failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter]: constructor threw exception; nested exception is java.lang.noclassdeffounderror: com/fasterxml/jackson/databind/exc/invaliddefinitionexception
at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.instantiatebean(abstractautowirecapablebeanfactory.java:1320)
at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory.java:1214)
at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:557)
at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:517)
at org.springframework.beans.factory.support.abstractbeanfactory.lambda$dogetbean$0(abstractbeanfactory.java:323)
at org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:226)
at org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:321)
at org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:202)
at org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:893)
at org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:879)
at org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:551)
at org.springframework.web.servlet.frameworkservlet.configureandrefreshwebapplicationcontext(frameworkservlet.java:702)
at org.springframework.web.servlet.frameworkservlet.createwebapplicationcontext(frameworkservlet.java:668)
at org.springframework.web.servlet.frameworkservlet.createwebapplicationcontext(frameworkservlet.java:716)
at org.springframework.web.servlet.frameworkservlet.initwebapplicationcontext(frameworkservlet.java:591)
at org.springframework.web.servlet.frameworkservlet.initservletbean(frameworkservlet.java:530)
at org.springframework.web.servlet.httpservletbean.init(httpservletbean.java:170)
at javax.servlet.genericservlet.init(genericservlet.java:158)
at org.apache.catalina.core.standardwrapper.initservlet(standardwrapper.java:1144)
at org.apache.catalina.core.standardwrapper.loadservlet(standardwrapper.java:1091)
at org.apache.catalina.core.standardwrapper.load(standardwrapper.java:983)
at org.apache.catalina.core.standardcontext.loadonstartup(standardcontext.java:4978)
at org.apache.catalina.core.standardcontext.startinternal(standardcontext.java:5290)
at org.apache.catalina.util.lifecyclebase.start(lifecyclebase.java:150)
at org.apache.catalina.core.containerbase.addchildinternal(containerbase.java:754)
at org.apache.catalina.core.containerbase.addchild(containerbase.java:730)
at org.apache.catalina.core.standardhost.addchild(standardhost.java:734)
at org.apache.catalina.startup.hostconfig.manageapp(hostconfig.java:1736)
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.apache.tomcat.util.modeler.basemodelmbean.invoke(basemodelmbean.java:300)
at com.sun.jmx.interceptor.defaultmbeanserverinterceptor.invoke(defaultmbeanserverinterceptor.java:819)
at com.sun.jmx.mbeanserver.jmxmbeanserver.invoke(jmxmbeanserver.java:801)
at org.apache.catalina.mbeans.mbeanfactory.createstandardcontext(mbeanfactory.java:482)
at org.apache.catalina.mbeans.mbeanfactory.createstandardcontext(mbeanfactory.java:431)
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.apache.tomcat.util.modeler.basemodelmbean.invoke(basemodelmbean.java:300)
at com.sun.jmx.interceptor.defaultmbeanserverinterceptor.invoke(defaultmbeanserverinterceptor.java:819)
at com.sun.jmx.mbeanserver.jmxmbeanserver.invoke(jmxmbeanserver.java:801)
at com.sun.jmx.remote.security.mbeanserveraccesscontroller.invoke(mbeanserveraccesscontroller.java:468)
at javax.management.remote.rmi.rmiconnectionimpl.dooperation(rmiconnectionimpl.java:1468)
at javax.management.remote.rmi.rmiconnectionimpl.access$300(rmiconnectionimpl.java:76)
at javax.management.remote.rmi.rmiconnectionimpl$privilegedoperation.run(rmiconnectionimpl.java:1309)
at java.security.accesscontroller.doprivileged(native method)
at javax.management.remote.rmi.rmiconnectionimpl.doprivilegedoperation(rmiconnectionimpl.java:1408)
at javax.management.remote.rmi.rmiconnectionimpl.invoke(rmiconnectionimpl.java:829)
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 sun.rmi.server.unicastserverref.dispatch(unicastserverref.java:357)
at sun.rmi.transport.transport$1.run(transport.java:200)
at sun.rmi.transport.transport$1.run(transport.java:197)
at java.security.accesscontroller.doprivileged(native method)
at sun.rmi.transport.transport.servicecall(transport.java:196)
at sun.rmi.transport.tcp.tcptransport.handlemessages(tcptransport.java:573)
at sun.rmi.transport.tcp.tcptransport$connectionhandler.run0(tcptransport.java:834)
at sun.rmi.transport.tcp.tcptransport$connectionhandler.lambda$run$0(tcptransport.java:688)
at java.security.accesscontroller.doprivileged(native method)
at sun.rmi.transport.tcp.tcptransport$connectionhandler.run(tcptransport.java:687)
at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1149)
at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:624)
at java.lang.thread.run(thread.java:748)
caused by: org.springframework.beans.beaninstantiationexception: failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter]: constructor threw exception; nested exception is java.lang.noclassdeffounderror: com/fasterxml/jackson/databind/exc/invaliddefinitionexception
at org.springframework.beans.beanutils.instantiateclass(beanutils.java:217)
at org.springframework.beans.factory.support.simpleinstantiationstrategy.instantiate(simpleinstantiationstrategy.java:87)
at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.instantiatebean(abstractautowirecapablebeanfactory.java:1312)
... 67 more
caused by: java.lang.noclassdeffounderror: com/fasterxml/jackson/databind/exc/invaliddefinitionexception
at org.springframework.http.converter.support.allencompassingformhttpmessageconverter.<init>(allencompassingformhttpmessageconverter.java:76)
at org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.<init>(requestmappinghandleradapter.java:205)
at sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method)
at sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:62)
at sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45)
at java.lang.reflect.constructor.newinstance(constructor.java:423)
at org.springframework.beans.beanutils.instantiateclass(beanutils.java:204)
... 69 more
caused by: java.lang.classnotfoundexception: com.fasterxml.jackson.databind.exc.invaliddefinitionexception
at org.apache.catalina.loader.webappclassloaderbase.loadclass(webappclassloaderbase.java:1308)
at org.apache.catalina.loader.webappclassloaderbase.loadclass(webappclassloaderbase.java:1136)
... 76 more
springmvc使用jackson解析数据报错
springmvc使用jackson解析json格式数据的时候:
在springmvc.xml里面使用<mvc:annotation-driven />就不用再单独配置处理器映射器。
已经导入了jar包,controller里面debug能拿到数据,最后页面访问的时候报错:
406 (not acceptable)
这时你需要看你是不是将所有前端控制器的后缀都配置成了html,如果是html,那么springmvc默认会采用text/html编码。
所以,后缀使用别的后缀或者,不用后缀就可以了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论