【发布时间】:2015-08-03 06:14:34
【问题描述】:
亲爱的 Spring 社区,
我正在使用 Spring 构建我的项目。在我的 API 层中,我利用 Validator 接口来进行一些自定义验证并设置错误。
@Override
public void validate(Object obj, Errors e) {
SignUpRequest signUpRequest = (SignUpRequest) obj;
User user = userService.getUserByEmail(signUpRequest.getEmail());
if (user != null) {
e.rejectValue("user", ErrorCodes.USER_EXIST, "user already exist");
}
}
现在,在我的 API 签名中,由于我使用的是 BindingResult 对象,如果用户为属性提供空值,则在我拥有的 @ControllerAdvice 中在我的 DTO 对象中,我将无法进入 @ExceptionHandler(MethodArgumentNotValidException.class)。
这意味着,我将无法为提供的任何空值抛出HttpStatus.BAD_REQUEST。
在我的验证器的上述情况下,它不会是HttpStatus.BAD_REQUEST,而是HttpStatus.OK。所以我的问题是,如何根据我从验证器获得的错误提供不同的 HttpStatus 类型?还有一种方法可以让我的@ExceptionHandler(MethodArgumentNotValidException.class) 在我的@ControllerAdvice 中获取空值,并让我的其他自定义验证由 bindingResult 获取?
我希望我对这个问题很清楚。感谢任何帮助!
【问题讨论】:
-
可以使用自定义 httpstatus new ResponseEntity
>(serv.search(search, Listing.class), HttpStatus.OK); 从异常处理程序发送类似的内容 -
当您在控制器中使用 BindingResult 时,ExceptionHandler 甚至不会被调用。
标签: spring validation api rest spring-mvc