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";
    } 
} 
posted @ 2022-08-12 12:55  Full98  阅读(93)  评论(0编辑  收藏  举报