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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码码哈哈0.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值