场景:java全局异常处理
@RestControllerAdvice与@ControllerAdvice的关系就像@Controller和@RestController的关系类似。简单来说,@RestControllerAdvice包含了@ControllerAdvice和@ResResponseBody
全局异常捕获handler示例
/**
* @Author: KenChen
* @Description: 全局异常捕获
* @Date: Create in 2024/2/20 16:50
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody //如果使用的是@ControllerAdvice注解则需要添加此注解,用于在捕获到异常时返回给前端json数据
public CommonResult handleException(Exception ex) {
return CommonResult.error("通用错误返回").putDate(ex.getMessage());
}
//此方法为@Validated的校验捕获
@ExceptionHandler(MethodArgumentNotValidException.class)
protected CommonResult<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex) {
// 获取验证错误信息
BindingResult bindingResult = ex.getBindingResult();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
List<String> collect = fieldErrors.stream()
.map(o -> o.getDefaultMessage())
.collect(Collectors.toList());
return CommonResult.error("校验失败").putDate(collect);
}
}