- 很久没有写过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也加上。还有一些是因为其它奇怪的原因,这一类问题建议一是在思考一下,冷静下来调试一下代码;另外一个是多用百度和谷歌搜一搜,应该是能解决问题的,都是时间问题。