这才是Controller层返回数据最优雅的写法
关于 Controller 的优雅写法,很多都是定一个统一返回对象 ResponseResult,然后在定一个返回工具类 ResultApi,于是 Controller 就成了这样:
1@GetMapping("/{id}")
2public ResponseResult<UserVO> getUserById(@RequestBody @PathVariable Long id) {
3 UserVO vo = usesrService.getById(id);
4 return ResultApi.ok(vo);
5}
但是这样虽然很好,不过还得每个返回都用 ResultApi.ok(),返回参数都得加 ResponseResult<>,相对还是还是繁琐,有没有更简单的呢,在 Controller,无需考虑别的,就按实际业务返回就行,比如
1@GetMapping("/{id}")
2public UserVO getUserById(@PathVariable Long id) {
3 UserVO vo = usesrService.getById(id);
4 return vo;
5}
6
7@PostMapping
8public void getUserById(@RequestBody UserVO vo) {
9 usesrService.save(vo);
10}
我们需要 UserVO 就直接返回他就行了,如果无需返回就 void,岂不是更好,要想实现这样的返回,只需要定一个统一返回拦截器就行
1/**
2 * 实现ResponseBodyAdvice接口
3 */
4@ControllerAdvice
5public class ResponseResultAdvice implements ResponseBodyAdvice<Object> {
6
7/**
8 * 可以指定哪些情况走统一返回,哪些不走
9 */
10@Override
11public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
12 //判断是否走beforeBodyWrite
13 return true;
14}
15/**
16 * 定义统一返回数据
17 */
18@Override
19public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
20 if (body instanceof ResponseResult){
21 return body;
22 }
23 return ResponseResult.ok(body);
24}
关注 “AUTRE” 微信公众号,给我留言