当前位置: 首页 > news >正文

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

一、概述:
  本文介绍且记录如何解决在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>
 
四、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数据类型。

可以参考这种配置:

http://andy-ghg.iteye.com/blog/1787564

 

转载于:https://www.cnblogs.com/gredswsh/p/SpringMVC_HttpMessageConverter415.html

相关文章:

  • Arcgis 10.1中空间连接功能
  • SQL SERVER索引
  • 浅谈C++多态性
  • Ubuntu12.04下使用valgrind内存测试工具测试Qt程序
  • 占位符的使用
  • OpenFlow协议标准演进过程
  • 收集与测试相关的所有工具
  • ORACLE优化器RBO与CBO介绍总结
  • 那些踩过的坑
  • 数学图形(1.44)超圆
  • ASP.NET MVC之单元测试分分钟的事
  • 连接池的概念
  • HBase集群安装过程中的问题集锦
  • jQuery星级评论打分组件
  • 如何构建一个优秀的移动网站?谷歌专家教你25招(三)[转]
  • github指令
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • leetcode讲解--894. All Possible Full Binary Trees
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Promise面试题2实现异步串行执行
  • spring + angular 实现导出excel
  • vue.js框架原理浅析
  • vue的全局变量和全局拦截请求器
  • 关于Java中分层中遇到的一些问题
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 区块链共识机制优缺点对比都是什么
  • 数据仓库的几种建模方法
  • 想写好前端,先练好内功
  • 写代码的正确姿势
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • nb
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • postgresql行列转换函数
  • Python 之网络式编程
  • 阿里云ACE认证之理解CDN技术
  • #### go map 底层结构 ####
  • ###C语言程序设计-----C语言学习(6)#
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 使用ajax控件后如何调用前端脚本
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @Transactional 详解
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [Everyday Mathematics]20150130
  • [JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
  • [Linux]文件基础-如何管理文件
  • [office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法
  • [Poetize6] IncDec Sequence