使用ResponseEntity作为的返回值的应用
作者:DanceDonkey
ResponseEntity作为的返回值
通常如果后端想响应json数据,我们需要在方法体上添加@Response注解,标注这个注解的方法的返回值会被spingmvc转为json形式并写入到响应体中。
但ResponseEntity则不会被springmvc转换,可以使用这个类定义响应头,状态码,响应体等。
@Controller public class ResponseBodyTest { @ResponseBody @GetMapping("b1") public R b1(){ //将方法的返回值转为json写入到响应体中 return R.ok().put("msg","success"); } @ResponseBody @GetMapping("b2") public ResponseEntity<String> b2(){ HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.TEXT_PLAIN); String str = "hello,world"; ResponseEntity responseEntity = new ResponseEntity<String>(str,httpHeaders,HttpStatus.OK); return responseEntity; } }
我们 /b2 请求设置了@ResponseBody注解,但由于返回的是ResponseEntity对象,而且我们又重新设置了响应类型为 text/plain,我们访问b2请求查看结果:
心得
ResponseEntity的优先级高于@ResponseBody。
在不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。如果响应类型是ResponseEntity可以不写@ResponseBody注解,写了也没有关系。
简单的说@ResponseBody可以直接返回Json结果, @ResponseEntity不仅可以返回json结果,还可以定义返回的HttpHeaders和HttpStatus。
统一结果返回 ResponseEntity
在正规的严格的企业的前后端系统开发中,返回严谨的状态码很有必要
平常大家为了统一格式返回,或许会自己封装一个ResultUtils,然后自定义ResultCode枚举类来返回,这样有些麻烦;
我们可以使用SpringMVC为我们封装的ResponseEntity对象来自定义状态码
源码:
public class ResponseEntity<T> extends HttpEntity<T> { private final Object status; public ResponseEntity(HttpStatus status) { this((Object)null, (MultiValueMap)null, (HttpStatus)status); } public ResponseEntity(@Nullable T body, HttpStatus status) { this(body, (MultiValueMap)null, (HttpStatus)status); } public ResponseEntity(MultiValueMap<String, String> headers, HttpStatus status) { this((Object)null, headers, (HttpStatus)status); } public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) { super(body, headers); Assert.notNull(status, "HttpStatus must not be null"); this.status = status; } private ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, Object status) { super(body, headers); Assert.notNull(status, "HttpStatus must not be null"); this.status = status; }
@param body: the entity body
- ResponseEntity需要一个泛型T
- 代表我们需要传入的数据对象
@param headers : the entity headers
- 我们可以new MultiValueMap<String, String> headers
- 设置响应头信息
@param status: the status code
- 我们可以使用HttpStatus
- 也可以自己定义状态码(Object)
HttpStatus status是一个包含了各种响应状态码的枚举类
// 201:创建成功 Created // 203 :没有认证 NON_AUTHORITATIVE_INFORMATION // 204: 成功没有返回值 No-content 一般是delete,update时使用 .....
例子:
@GetMapping("/categories") public ResponseEntity<List<Category>> getCategoryList(String token){ return new ResponseEntity<>(categoryService.queryAll(), HttpStatus.OK); } @PostMapping("/categories") public ResponseEntity<Category> AddCategory(String token, @RequestBody Category category){ return new ResponseEntity<>(categoryService.insert(category),HttpStatus.CREATED); }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。