`

SpringMVC 3.x @ResponseBody 415错误处理

 
阅读更多
<!-- 配置SpringMVC @ResponseBody和@RequestBody注解 -->
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="jsonHttpMessageConverter" />
			</list>
		</property>
	</bean>

	<bean id="jsonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>application/json;charset=UTF-8</value>
			</list>
		</property>
	</bean>


配置好之后,使用@RequestBody尝试转换json为Javabean,有时会返回HTTP错误码415 Unsupported media type,把log改为debug,Spring并没有给出有用信息。网上有些说法是修改HttpRequest头的Accept和Content-type,无效。经过代码追踪发现,其实是实现转换的Jackson包抛出异常,而Spring拦截了该异常,错误信息丢失……

一般来说Json的每种数据,都有相应的Java类型,Jackson无法进行转换通常有两个原因:
1.Javabean没有实现无参数的构造方法。
2.Javabean无法序列化,有可能是定义Javabean的是内部类……
3.Javabean使用了泛型,虽然Jackson支持泛型但是@RequestBody不支持输入泛型类型参数,所以不要在Javabean上使用泛型……

解决以上两个问题,再也不报415了。
分享到:
评论
2 楼 redrunner 2012-12-26  
分析的得很好,有帮助
1 楼 showyourshadow 2012-10-17  
如果是使用jquery调用post,可先用
    $.ajaxSetup({  
        contentType : 'application/json' 
    }); 

设置为json提交格式,否则,也会报http 425错误。

相关推荐

Global site tag (gtag.js) - Google Analytics