SpringBoot全局异常处理
@RestControlAdvice注解是 @ResponseBody和@ControllerAdvice注解的组合注解,
注解了@RestControllerAdvice的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,适用于所有使用@RequestMapping方法。
@ExceptionHandler:用于指定异常处理方法。当与@RestControllerAdvice配合使用时,用于处理全局异常。
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public CommonResult parameterExceptionHandler(MethodArgumentNotValidException e) {
log.error("请求参数异常", e);
// 获取异常信息
BindingResult bindingResult = e.getBindingResult();
String message = null;
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
if (fieldError != null) {
message = fieldError.getField() + fieldError.getDefaultMessage();
}
}
return CommonResult.validateFailed(message);
}
@ContrillerAdvice可以设置管理Controller的范围
- basePackages:指定一个或多个包,这些包及其子包下的所有 Controller 都被该 @ControllerAdvice 管理,其中下面两个等价basePackages。
@ControllerAdvice(basePackages = {"cn.myz.demo.controller"})
//@ControllerAdvice("cn.myz.demo.controller")
//@ControllerAdvice(value = "cn.myz.demo.controller")
- basePackageClasses:是 basePackages 的一种变形,指定一个或多个 Controller 类,这些类所属的包及其子包下的所有 Controller 都被该 @ControllerAdvice 管理。
@ControllerAdvice(basePackageClasses = {MyController1.class})
- assignableTypes:指定一个或多个 Controller 类,这些类被该 @ControllerAdvice 管理。
@RestControllerAdvice(assignableTypes={TestController.class})
- annotations: 指定一个或多个注解,被这些注解所标记的 Controller 会被该 @ControllerAdvice 管理
@ControllerAdvice(annotations = {TestAnnotation.class})
@Slf4j
public class ExceptionHandlerAdvice {
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
return "error";
}
}