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

  • 很久没有写过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.ReponseVO
	at 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)
	......

SpringMVC报错No converter found for return value of type的一种解决方案_第1张图片

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

  • 原因是我配置了一个RestController并且返回了一个对象。
    SpringMVC报错No converter found for return value of type的一种解决方案_第2张图片

  • 这个controller定义本身没有问题,在看看我dispatcher-servlet.xml中关于messageConverter的配置:
    SpringMVC报错No converter found for return value of type的一种解决方案_第3张图片
    很明显,我没有定义什么类型的消息转换器。

  • 从网上搜索得到的答案是spring默认是依赖jackson来做消息转换处理的,不需要配置。但是我看看我的依赖里面:
    SpringMVC报错No converter found for return value of type的一种解决方案_第4张图片

  • 我使用的是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-8value>
                        <value>application/jsonvalue>
                    list>
                property>
                <property name="features">
                    <list>
                        <value>WriteMapNullValuevalue>
                        <value>QuoteFieldNamesvalue>
                    list>
                property>
            bean>
		mvc:message-converters>
	mvc:annotation-driven>

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

你可能感兴趣的:(JAVA)