場景: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);
}
}