SpringBoot全局异常@ControllerAdvice注解不生效原因:自定义切面导致

问题描述

在这里我自定义了一个@Aspect切面类,用于拦截Controller里面的 验证BindingResult bindingResult有没有参数错误,然后导致了ControllerAdvice失效

解决方法:

参数校验出问题时会报错,拦截MethodArgumentNotValidException.class错误并处理即可

@ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        assert bindingResult != null;
        String msg = bindingResult.getFieldErrors().stream().sorted(Comparator.comparing(FieldError::getField))
                .map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
        log.error("参数验证失败: {},", e.getMessage());
        return ResponseResult.error(msg);
    }

以上处理方式使用前提:

Controller使用使用@Valid校验参数

Controller示例


@RestController
@RequestMapping("/auth")
@Api(tags = "用户身份验证接口")
public class UserAuthController {
    @Autowired
    MkUserService mkUserService;

    @RequestMapping("/tokenCheck")
    @ApiOperation("用户Token身份验证")
    public ResponseResult verifyToken(@RequestBody @Valid AuthDto authdto) {
        return mkUserService.verifyToken(authdto);
    }

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthDto {
    @NotNull(message = "token不能为空!")
    @NotEmpty(message = "token不能为空格!")
    String token;
}

版权声明:本文为weixin_43505211原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。