SpringMVC 中HttpMessageConverter简介和Http请求415 Unsupported Media Type的问题

转载 2016年08月31日 16:52:42

转载自:http://www.2cto.com/kf/201312/262557.html


一、概述:

  本文介绍且记录如何解决在SpringMVC 中遇到415 Unsupported Media Type 的问题,并且顺便介绍Spring MVC的HTTP请求信息转换器HttpMessageConverter。
 
二、问题描述:
  在SprinvMVC的Web程序中,我在页面发送Ajax 的POST请求,然后在服务器端利用@requestBody接收请求body中的参数,当时运行过程中,我想服务器发送Ajax请求,浏览器一直反馈415 Unsupported Media Type或者400的状态码,以为是Ajax写的有问题。便查找了半天资料,才发现spring-mvc.config文件的配置中少了东西,当然也有可能是你真的在Ajax中缺少了对Content-Type参数的设置。分析后应该是我springMVC-config.xml文件配置有问题。
(注):400:(错误请求) 服务器不理解请求的语法。 415:(不支持的媒体类型) 请求的格式不受请求页面的支持。
 
三、解决方法: 
  在springMVC-config.xml文件中,增加了一个StringHttpMessageConverter请求信息转换器,配置片段如下:
复制代码
<!--- StringHttpMessageConverter bean -->
< bean id = "stringHttpMessageConverter" class = "org.springframework.http.converter.StringHttpMessageConverter"/>
 
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" />
<!-- 新增的StringMessageConverter bean -->
<ref bean="stringHttpMessageConverter" />
<!-- <ref bean="jsonHttpMessageConverter" /> -->
<ref bean="formHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter" />
<!-- <bean id="jsonHttpMessageConverter"
class="org.springframework.http.converter.json.JsonHttpMessageConverter" /> -->
<bean id="formHttpMessageConverter"
class="org.springframework.http.converter.FormHttpMessageConverter" />
复制代码
 
 
四、HttpMessageConverter请求信息转换器简介:
 
  HttpMessageConverter接口指定了一个可以把Http request信息和Http response信息进行格式转换的转换器。通常实现HttpMessageConverter接口的转换器有以下几种:
ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
StringHttpMessageConverter:   负责读取字符串格式的数据和写出二进制格式的数据;
 ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据; 
FormHttpMessageConverter:       负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据;
MappingJacksonHttpMessageConverter:  负责读取和写入json格式的数据;
SourceHttpMessageConverter:                   负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
Jaxb2RootElementHttpMessageConverter:  负责读取和写入xml 标签格式的数据;
AtomFeedHttpMessageConverter:              负责读取和写入Atom格式的数据;
RssChannelHttpMessageConverter:           负责读取和写入RSS格式的数据;
(注)更多关于HttpMessageConverter的信息请看:http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/converter/HttpMessageConverter.html
 
五、HttpMessageConverter请求信息转换器执行流程:
   当用户发送请求后,@Requestbody 注解会读取请求body中的数据,默认的请求转换器HttpMessageConverter通过获取请求头Header中的Content-Type来确认请求头的数据格式,从而来为请求数据适配合适的转换器。例如contentType:applicatin/json,那么转换器会适配MappingJacksonHttpMessageConverter。响应时候的时候同理,@Responsebody注解会启用HttpMessageConverter,通过检测Header中Accept属性来适配的响应的转换器。
 
总结:
  当在使用SpringMVC做服务器数据接收时,尤其是在做Ajax请求的时候,尤其要注意contentType属性,和accepte 属性的设置,在springmvc-config.xml中配置好相应的转换器。当我们在用SpringMVC做 Ajax 请求的时候,有的做法用response.getWriter().print()的方法,还有更好的方法就是添加@Responsebody注解,直接返回Map类型的数据,转换器自动转换为JSON数据类型。       



在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案

Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象。 正好今天有这样的需求,使用一下,结果一直报415,十分头疼。 HTTP 415 错误 – 不支...
  • z69183787
  • z69183787
  • 2016年08月24日 17:03
  • 5481

在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案

Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象。 正好今天有这样的需求,使用一下,结果一直报415,十分头疼。 HTTP 415 错误 – 不支...
  • qq173684423
  • qq173684423
  • 2016年10月14日 00:33
  • 2034

js原生创建封装ajax的方法,附XMLHttpRequest状态码

//创建 var gc = gc || {};gc.ajax = function(options){//options = {url:'',method:'',data:'',callback:'...
  • qq_17335153
  • qq_17335153
  • 2015年12月04日 15:52
  • 1837

springMVC中使用 RequestBody 及 Ajax POST请求 415 (Unsupported Media Type)

使用POST请求的时候一直报错:   Ajax 未设置 contentType 时会报 415 。 后台 RequestBody  承接前台参数,故对参数data的要求为“必传”“JSON...
  • qq_37180608
  • qq_37180608
  • 2017年04月28日 17:06
  • 472

力所能及之springmvc NetworkError: 415 Unsupported Media Type

springmvc NetworkError: 415 Unsupported Media Type 首先 ,DefaultAnnotationHandlerMapping对象负责类级别的@Reque...
  • zhanglu1236789
  • zhanglu1236789
  • 2015年05月17日 18:30
  • 2363

爬虫415(UNsupported media type)问题解决

爬虫遇到的问题:这两天做爬虫遇到些问题,我在这里总结一下,希望能够和大家分享,共同学习,共同进步。今天在我爬某个网站的时候,返回的结果是415,不支持的媒体类型(Unsupported media t...
  • javamanjosen
  • javamanjosen
  • 2017年01月03日 18:42
  • 551

SpringSide4 @RequestBody接受post json对象 (415 Unsupported media type)

jQuery异步post json对象,一直出现一个415的错误!我尝试过配置spring的配置文件进行解决处理(补充的配置),并且检查Bean类要有无参构造函数和get set 方法、Jac...
  • liu4071325
  • liu4071325
  • 2016年08月18日 17:12
  • 1044

SpringMVC restful 异常Could not write request: no suitable HttpMessageConverter found for request type

Exception in thread "main" org.springframework.web.client.RestClientException: Could not write reque...
  • woniu4500
  • woniu4500
  • 2014年10月14日 10:16
  • 933

SpringMVC @ResponseBody 415错误处理及org.springframework.http.converter.json.MappingJacksonHttpMessageCon

闲话少说,刚开始用SpringMVC, 页面要使用jQuery的ajax请求Controller。 但总是失败,主要表现为以下两个异常为:异常一: Java.lang.ClassNotFoundEx...
  • cuiyaoqiang
  • cuiyaoqiang
  • 2016年05月13日 09:20
  • 1166

在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案

Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象。 正好今天有这样的需求,使用一下,结果一直报415,十分头疼。 HTTP 415 错误 – 不支...
  • cl1107056481
  • cl1107056481
  • 2015年01月22日 17:17
  • 1529
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpringMVC 中HttpMessageConverter简介和Http请求415 Unsupported Media Type的问题
举报原因:
原因补充:

(最多只允许输入30个字)