向左向右

这才是Controller层返回数据最优雅的写法

spring boot
Controller
response

关于Controller的优雅写法,很多都是定一个统一返回对象ResponseResult,然后在定一个返回工具类ResultApi,于是Controller就成了这样:

@GetMapping("/{id}")
public ResponseResult<UserVO> getUserById(@RequestBody @PathVariable Long id) {
    UserVO vo = usesrService.getById(id);
    return ResultApi.ok(vo);
}

但是这样虽然很好,不过还得每个返回都用ResultApi.ok(),返回参数都得加ResponseResult<>,相对还是还是繁琐,有没有更简单的呢,在Controller,无需考虑别的,就按实际业务返回就行,比如

@GetMapping("/{id}")
public UserVO getUserById(@PathVariable Long id) {
    UserVO vo = usesrService.getById(id);
    return vo;
}

@PostMapping
public void getUserById(@RequestBody UserVO vo) {
    usesrService.save(vo);
}

我们需要UserVO 就直接返回他就行了,如果无需返回就void,岂不是更好,要想实现这样的返回,只需要定一个统一返回拦截器就行

/**
 * 实现ResponseBodyAdvice接口
 */
@ControllerAdvice
public class ResponseResultAdvice implements ResponseBodyAdvice<Object> {

/**
 * 可以指定哪些情况走统一返回,哪些不走
 */
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
    //判断是否走beforeBodyWrite
    return true;
}
/**
 * 定义统一返回数据
 */
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
    if (body instanceof ResponseResult){
        return body;
    }
    return ResponseResult.ok(body);
}
关注 “AUTRE” 微信公众号,给我留言
关注我