@RequestBody, @ResponseBody 注解理解

Posted weixuqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@RequestBody, @ResponseBody 注解理解相关的知识,希望对你有一定的参考价值。

@RequestBody, @ResponseBody 注解理解

自己以前没怎么留意过,来实习后公司采用前后端分离的开发方式,前后端拿到的注释都是 json 格式的,这时候 @RequestBody, @ResponseBody 这两个注解就非常好用,下面详细介绍用法:

@RequestBody

1. 作用:
  • 该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到要返回的对象上;
  • 再把 HttpMessageConverter 返回的对象数据绑定到 controller 中方法的参数上。
2. 使用时机:
GET、POST方式提交时, 根据 request header Content-Type 的值来判断:
  • application/x-www-form-urlencoded可选(即非必须,因为这种情况的数据 @RequestParam, @ModelAttribute 也可以处理,当然@RequestBody也能处理);
  • multipart/form-data不能处理(即使用@RequestBody不能处理这种格式的数据);
  • 其他格式:必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
PUT 方式提交时, 根据request header Content-Type的值来判断:
  • application/x-www-form-urlencoded必须
  • multipart/form-data不能处理
  • 其他格式:必须
3. 举个例子:

也就是说,如果是 json 格式的数据,我们要传入的参数是一个对象,那就必须使用 @RequestBody

@RequestMapping(value = "/test", Method = RequestMethod.POST, produces = "application/json;charset="UTF-8")
@ResponseBody
public JSONObject class Test(@RequestBody Test test) 
    String name = test.getName();
    // 将 name 回显
    Map<String, Object> map = new HashMap<>();
    map.put("name", name);
    JSONObject obj = JSONObject.fromObject(map);
    return obj;

@ResponseBody

1. 作用:

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

2. 使用时机:

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

3. 举个例子:
@RequestMapping(value = "/test", Method = RequestMethod.POST, produces = "application/json;charset="UTF-8")
@ResponseBody
public JSONObject class Test() 
    JSONObject obj = new JSONObject;
    obj.put("test", 1);
    // 将 obj 回显
    return obj;

参考:

https://blog.csdn.net/walkerJong/article/details/7520896

完。

以上是关于@RequestBody, @ResponseBody 注解理解的主要内容,如果未能解决你的问题,请参考以下文章

@RequestBody和@RequestParam区别

@RequestBody使用

@RequestParam @RequestBody @PathVariable 之@requestBody注解的使用

@RequestBody 和 @RequestParam 有啥区别?

@RequestBody 处理类型

自定义spring参数注解 - 打破@RequestBody单体限制