SpringMVC 3.x @ResponseBody 415异常处理
SpringMVC 3.x @ResponseBody 415错误处理
配置好之后,使用@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了。
<!-- 配置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了。