spring+@RequestBody访问

概念

@RequestBody的注解是一个spring中很实用的功能,它能帮我们解析客户端(移动设备、浏览器等)发送过来的json数据,并封装到实体类中。

细节

content-type

@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

绑定对应的bean上

通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
前端请求:

$.ajax({
	url:"/login",
	type:"POST",
	data:'{"userName":"admin","pwd","admin123"}',
	content-type:"application/json charset=utf-8",
	success:function(data){
	alert("request success ! ");
	}
});

后端处理

@requestMapping("/login")
public void login(@requestBody String userName,@requestBody String pwd){
	System.out.println(userName+" :"+pwd);
}

这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
String userName;
String pwd;
那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的

特殊情况

在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式
不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在特殊情况下才会使用,例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式

请求方式

@RequestBody只支持 post、put、patch这三种。其他的是不支持的。见源码


AbstractMessageConverterMethodArgumentResolver private static final 
Set<HttpMethod> SUPPORTED_METHODS =   EnumSet.of(HttpMethod.POST, HttpMethod.PUT, HttpMethod.PATCH);

为REquestBody的参数转换类。
除了post、put、patch这三种请求,其他的不要使用RequestBody格式。@RequestBody是把请求体进行转换,通过RequestResponseBodyMethodProcessor.java 的 readWithMessageConverters方法对@RequestBody注解的请求进行处理,然后转化为对应的参数。如果不是这三种请求方式。或者是请求的参数不在请求body中,那么是无法被rqeustBody进行捕捉和转换的。

猜你喜欢

转载自blog.csdn.net/weixin_37924923/article/details/88873579