使用POST请求的时候一直报错:  

Ajax 未设置 contentType 时会报 415 。

后台 RequestBody  承接前台参数,故对参数data的要求为“必传”“JSON”,否则会报400.

@RequestMapping(value="/venueDetail")
@ResponseBody
public Map<String,Object> getVenueDetail(@RequestBody Map<String, Object> paraMap,HttpServletRequest request){

参见 : http://www.2cto.com/kf/201312/262557.html

原因如下:

  在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数据类型。

springMVC中使用 RequestBody 及 Ajax POST请求 415 (Unsupported Media Type)的更多相关文章

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

    一.概述: 本文介绍且记录如何解决在SpringMVC 中遇到415 Unsupported Media Type 的问题,并且顺便介绍Spring MVC的HTTP请求信息转换器HttpMessag ...

  2. Ajax请求(415 Unsupported Media Type)

    Unsupported media type-415(不支持的媒体类型) 该错误类型是后台接收参数为json类型的,然而ajax提交的类型不对,如下: 异常代码: $.ajax({ url: api ...

  3. [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢?

    [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢? 在ASP.NET Core应用程序中,接 ...

  4. 问题.springmvc错误.415:Unsupported Media Type

    场景是在希望用ajax发post请求,传递一个json对象,在controller中直接使用java对象接收时遇到的,具体错误信息如下: { "timestamp": 150027 ...

  5. HTTP Status 415 – Unsupported Media Type(使用@RequestBody后postman调接口报错)

    1.问题描述:使用springMVC框架后,添加数据接口中,入参对象没使用@RequestBody注解,造成postman发起post请求, from-data可以调通接口,但是raw调不通接口,然后 ...

  6. springmvc4.3.7中使用RequestBody,传入json参数时,得到错误415 Unsupported Media Type

    在新建一个maven的项目的时候,当时并非springboot项目,是通过xml来配置的项目.在项目中DispatcherServlet的配置文件中配置了annotation-driven的, < ...

  7. POST JSON fails with 415 Unsupported media type, SpringMVC

    网上的解决办法非常多,但是大多不靠谱. 归结原因:SpringMVC 无法通过 httprequest headers 中的 Content-Type 和 Accept 匹配到对应的HttpMessa ...

  8. [JavaEE]调用Restful Service 出现415 Unsupported Media Type的问题(Rest Request Header中的Content-Type问题)

    用Chrome的插件Simple REST Client 调用POST的REST服务时,老是报415错误,如图. 一开始就以为是服务端的问题,各种google,百度,折腾了一下午未果. 晚上继续看,一 ...

  9. RestTemplate远程调用POST请求:HTTP 415 Unsupported Media Type

    这是本项目的接口 称为client @POST @Path("/{urlcode}") @Consumes(MediaTypes.JSON_UTF_8) @Produces(Med ...

随机推荐

  1. 使用maven结合requirejs管理前端脚本

    已有的web项目,一直使用Maven做工程管理,现阶段前端调整为使用requirejs来负责模块加载依赖,同时使用jasmine来完成前端的UT. 便与在maven下统一管理,简单整理了下合在一起的使 ...

  2. spring定时任务(@Scheduled注解)cron表达式详解

    cron表达式详解: 一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 秒(~) 分钟(~) 小时(~) 天(~) 月(~) 星期(~ =SUN 或 SUN,MON,TU ...

  3. jquery样式表和效果

    $("p").css({ "color": "#ff0011", "background": "blue&qu ...

  4. cf #363 c

    C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  5. 使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

    在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb ...

  6. python3----ljust rjust center

    Python中打印字符串时可以调用ljust(左对齐),rjust(右对齐),center(中间对齐)来输出整齐美观的字符串,使用起来非常简单,包括使用第二个参数填充(默认为空格).看下面的例子就会明 ...

  7. Core Services层

    本文转载至 http://jingyan.baidu.com/article/cdddd41c57360853cb00e124.html Core Services层是系统很多部分的基础部分,也许应用 ...

  8. ubuntu虚拟化平台libvrit-bin

    http://download.cirros-cloud.net/0.3.5/ 下载 cirros-0.3.5-x86_64-disk.img 因为 KVM(准确说是 Libvirt)默认不接受远程管 ...

  9. 【BZOJ1923】[Sdoi2010]外星千足虫 高斯消元

    [BZOJ1923][Sdoi2010]外星千足虫 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 ...

  10. 从ELK到EFK

    https://my.oschina.net/itshare/blog/775466 http://blog.51cto.com/467754239/1700828 日志系统 日志就是程序产生的,遵循 ...