springmvc 的@RequestBody的使用

@RequestBody

作用:

i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;

ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

使用时机:

A) GET、POST方式提时, 根据request header Content-Type的值来判断:

  • application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
  • multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
  • 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

B) PUT方式提交时, 根据request header Content-Type的值来判断:

  • application/x-www-form-urlencoded, 必须;
  • multipart/form-data, 不能处理;
  • 其他格式, 必须;

说明:request的body部分的数据编码格式由header部分的Content-Type指定;

@ResponseBody

作用:

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;

StringHttpMessageConverter:   负责读取字符串格式的数据和写出二进制格式的数据;

ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据; 

FormHttpMessageConverter:      
负责读取form提交的数据(能读取的数据格式为
application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入
application/x-www-from-urlencoded和multipart/form-data格式的数据;

MappingJacksonHttpMessageConverter:  负责读取和写入json格式的数据;

SouceHttpMessageConverter:                   负责读取和写入 xml 中javax.xml.transform.Source定义的数据;

Jaxb2RootElementHttpMessageConverter:  负责读取和写入xml 标签格式的数据;

AtomFeedHttpMessageConverter:              负责读取和写入Atom格式的数据;

RssChannelHttpMessageConverter:           负责读取和写入RSS格式的数据;

当使用@RequestBody和@ResponseBody注解时,RequestMappingHandlerAdapter就使用它们来进行读取或者写入相应格式的数据。

配置:<mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <ref bean="BSY_Crm.FormHttpMessageConverter" />
            <ref bean="BSY_Crm.StringHttpMessageConverter" />
            <ref bean="BSY_Crm.JacksonHttpMessageConverter" />
        </mvc:message-converters>
    </mvc:annotation-driven>

时间: 2024-11-08 13:56:41

springmvc 的@RequestBody的使用的相关文章

springMVC的@RequestBody注解使用

如果没有特殊的设置,无论用什么样的http请求方法,只要携带body参数,用@RequestBody都是可以获取到body的内容的 参数是json字符串格式,使用方式有两种 @RequestBody只有一个属性,required默认等于true,如果不设置required属性,就默认必须传body体,否则会报400错误,如果设置了body体,但是没有设置header或者设置了header:content-type!=application/json ,会报415错误 第一种:使用@Request

springMVC中@requestBody问题

近来没事帮同学做一个毕业设计用SpringMVC,项目开发一直有用但是没有自己从开始进行搭建,在使用@Request中出现了很多的问题 @RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象. @ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流. 一 首先是springMVC的配置文件: <context:annotation-config />

用springmvc的@RequestBody和@ResponseBody 接收和响应json格式数据

1.controller @Controller @RequestMapping("/rest/v1") public class WelcomeController { @RequestMapping(value="/date/json/next", method=RequestMethod.POST,consumes="application/json" ,produces="application/json") @Res

【Spring学习笔记-MVC-6】SpringMVC 之@RequestBody 接收Json数组对象

作者:ssslinppp       1. 摘要 程序流程: 前台使用ajax技术,传递json字符串到后台: 后台使用Spring MVC注解@RequestBody 接受前台传递的json字符串,并返回新的json字符串到前台: 前台接受后台传递过来的json数据,并显示. 2. 前台界面和js <%@ page language="java" pageEncoding="UTF-8"%> <% String path = request.ge

springmvc中@requestbody注解接收请求参数

一.POST请求的四种常用方式 1.application/x-www-form-urlencoded 浏览器原生的表单,值为urlencoded之后的  key1=value1&key2=value2...... 2.multipart/form-data 浏览器原生的文件表单,用于传输文件 3.application/json 常用的请求头格式,值为json串  {"key1":"value1","key2":"value2

springmvc @RequestParam @RequestBody @PathVariable 等参数绑定注解详解

简介: handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A.处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解:   @PathVariable; B.处理request header部分的注解:   @RequestHeader, @CookieValue; C.处理request body部分的注解:@RequestParam,  @Reque

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

我在使用SpringMVC的@RequestBody和@ResponseBody注解处理JSON数据的时候,总是出现415的错误,说是不支持所提交数据格式,我在页面中使用了JQuery的AJAX来发出JSON数据给服务器: $.ajax({ type:'post', url:'${pageContext.request.contextPath }/requestJSON.action', contentType :'application/json;charset=utf-8', //数据是JS

angularjs的post请求参数的转换,使之跟ajax一样参数供springMVC使用

一般情况下,angularjs的post格式是(我的模板): angularjs的请求方式是: Content-Type: application/json 这样传过去的数据是这样子的:如传递一个数组:图中targetArr是数组  真正的格式是json格式啊,springMVC不好接收的:  展开来是这样的,总之就是springMVC的@RequestParam所不能接受的类型: 这种情况下,先说说正常可以行得通,不用在js转换格式的方式:用springMVC的@RequestBody去接受j

SpringMVC请求体参数处理问题

如果请求定义为application/json格式,则要用Spring MVC中@RequestBody参数才能接受(用@RequestParam参数接受会报400错误),但SpringMVC的@RequestBody注解一个方法只能用一个,且接受的是完整的body内容,如前台传递:{id:1},后台接受的参数值也是{id:1},因此必须要做对应的解析处理,所以: 1.一般非必须情况下,用SpringMVC时少用application/json格式的请求. 2.定一个和参数对应的POJO类,或用