当 @RestControllerAdvice
与 ResponseBodyAdvice
结合使用时,可以实现全局性的对控制器方法的返回结果进行统一处理,比如添加通用的响应头、对返回结果进行统一封装等。这种组合可以让开发者更加方便地管理 RESTful 服务的返回结果。
通过在被 @RestControllerAdvice
标记的类中定义 @ExceptionHandler
方法,可以捕获和处理全局范围内的异常,然后以 JSON 或 XML 格式返回适当的错误信息。
@RestControllerAdvice
public class GlobalResponseHandler implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
// 判断是否需要对该类型的返回结果进行处理
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// 在将控制器方法的返回值转换为 HTTP 响应体之前修改响应
// 可以修改返回结果,添加额外信息等
return body;
}
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception ex) {
ErrorResponse error = new ErrorResponse("Internal Server Error", ex.getMessage());
return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
}