SSM,Conllroller接收json解析失败,报错StandardWrapperValve.invoke,解决方案

本文介绍了一个关于Jackson版本不一致导致的NoClassDefFoundError错误,并提供了详细的解决方案,包括调整POM文件中的依赖版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 报错
    1. 18-Apr-2021 09:51:33.606 严重 [http-nio-8080-exec-6] org.apache.catalina.core.StandardWrapperValve.invoke 在路径为/Aplp_war的上下文中,Servlet[DispatcherServlet]的Servlet.service()引发了具有根本原因的异常Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/exc/InputCoercionException
      	java.lang.ClassNotFoundException: com.fasterxml.jackson.core.exc.InputCoercionException
      		at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
      		at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
      		at com.fasterxml.jackson.databind.deser.std.JdkDeserializers.<clinit>(JdkDeserializers.java:26)
      		at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findDefaultDeserializer(BasicDeserializerFactory.java:1852)
      		at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.findStdDeserializer(BeanDeserializerFactory.java:167)
      		at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:131)
      		at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:411)
      		at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
      		at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
      		at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
      		at com.fasterxml.jackson.databind.deser.DeserializerCache.hasValueDeserializerFor(DeserializerCache.java:191)
      		at com.fasterxml.jackson.databind.DeserializationContext.hasValueDeserializerFor(DeserializationContext.java:421)
      		at com.fasterxml.jackson.databind.ObjectMapper.canDeserialize(ObjectMapper.java:3043)
      		at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.canRead(AbstractJackson2HttpMessageConverter.java:180)
      		at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:200)
      		at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)
      		at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)
      		at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
      		at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)
      		at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
      		at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
      		at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
      		at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
      		at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
      		at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
      		at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
      		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:652)
      		at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
      		at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
      		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
      		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      		at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
      		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      		at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
      		at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
      		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      		at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
      		at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
      		at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
      		at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
      		at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
      		at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
      		at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
      		at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
      		at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
      		at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
      		at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
      		at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
      		at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
      		at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      		at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      		at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      		at java.base/java.lang.Thread.run(Thread.java:830)

  2. 我的代码
    1. Conllroller
      1. @RequestMapping(value="/Sign",method= RequestMethod.POST)
        public String Sign(@RequestBody Sign user){
            
            System.out.println(user.toString());
            
            return null;
        }

         

    2. ajax
      1. function loginPost() {
           $.ajax({
              url: "http://localhost:8080/Aplp_war/Login/sign.action",
              contentType: "application/json;charset=utf-8",
              data:getText(),
              dataType: "jsonp",
              type: "POST",
              xhrFields: {withCredentials: true},
              success:function(data) {
                 console.log(data);
                 alert(data);
              }, error:function(XMLResponse){
                 console.log(XMLResponse.responseText);
                 //alert(XMLResponse.responseText);
              }
           });
        }
        
        //获取文本信息并制作出Json
        function getText() {
           var idText = document.getElementById("id").value;
           var pwdText = document.getElementById("pwd").value;
           var idType = "id";
           if (checkEmail(idText)) {
              idType = "Email";
           } else if (checkMobile(idText)) {
              idType = "phone";
           }
           var ret=new Object();
           ret.basis=idType;
           ret.value=idText;
           ret.password=pwdText;
           return JSON.stringify(ret);
        }

         

  3. 问题原因
    1. 是json引包的问题,我引入Jackson的jar包的版本不一致,所以导致了这个问题,看pom.xml
    2. <!--               Jackson            -->
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.10.0</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.9.8</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.9.8</version>
      </dependency>
      <!--               Jackson            -->

       

  4. 解决办法
    1. 把引入Jackson的jar包的版本写成一致的,就能解决了,看pom.xml
    2. <!--               Jackson            -->
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.10.0</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.10.0</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.10.0</version>
      </dependency>
      <!--               Jackson            -->

       

  5. 效果
  6. 其实就算不用json解析,用这样的方式也是能获取到信息的,只是结果需要你自己去解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值