当前位置: 代码迷 >> 综合 >> SpringMVC报错No converter found for return value of type的一种解决方案
  详细解决方案

SpringMVC报错No converter found for return value of type的一种解决方案

热度:74   发布时间:2023-12-21 22:29:56.0
  • 很久没有写过javaWeb的代码了,最近用javaWeb(没有使用maven和gradle)引入spring4.3.9相关的包做开发时遇到一些问题。其中一个是:
严重: 在路径为/xxh的上下文中,Servlet[dispatcher]的Servlet.service()引发了具有根本原因的异常Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class xyz.ruankun.xxh.vo.ReponseVO
java.lang.IllegalArgumentException: No converter found for return value of type: class xyz.ruankun.xxh.vo.ReponseVOat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:187)at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:174)at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:113)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)......

在这里插入图片描述

  • 那么如何报了这个错误呢?

  • 原因是我配置了一个RestController并且返回了一个对象。
    在这里插入图片描述

  • 这个controller定义本身没有问题,在看看我dispatcher-servlet.xml中关于messageConverter的配置:
    在这里插入图片描述
    很明显,我没有定义什么类型的消息转换器。

  • 从网上搜索得到的答案是spring默认是依赖jackson来做消息转换处理的,不需要配置。但是我看看我的依赖里面:
    在这里插入图片描述

  • 我使用的是fastJson,所以springmvc没有办法将返回的对象转换成json对象就报错了。所以解决的办法现在有两个:

  • 一是将fastJson改为jackson,引入jackson的包。

  • 二是配置一下fastJson的messageConvertor

	<mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="defaultCharset" value="utf-8"></property></bean><bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>application/json</value></list></property><property name="features"><list><value>WriteMapNullValue</value><value>QuoteFieldNames</value></list></property></bean></mvc:message-converters></mvc:annotation-driven>

除此之外,还有一些是因为没有在java Object中添加setter方法,最好把getter也加上。还有一些是因为其它奇怪的原因,这一类问题建议一是在思考一下,冷静下来调试一下代码;另外一个是多用百度和谷歌搜一搜,应该是能解决问题的,都是时间问题。

  相关解决方案