问题描述
在这里我自定义了一个@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;
}