我们可以通过在@ControllerAdvice注解类上实现ResponseBodyAdvice注解来实现统一返回值类型;
例如统一接口的返回类型为Result类
@ControllerAdvice
static class MyControllerAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
// 判断满足加了@ResponseBody注解的方法才进行格式的同义转换例如统一转为Result: {code: message: data: }
return true;
}
// 转换类型
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if(body instanceof Result){
return body;
}
return new Result.ok(body);
}
}
@Data
static class Result<T>{
private String code;
private String message;
private T data;
}