经过两天以上的成功命中和审判,我问了这个问题。由于对Spring验证和JSR验证,Spring如何调用JSR验证器,JSR标准中的更改以及所支持的验证类型感到困惑,因此出现了许多令人困惑的答案。
最后,这篇文章对我们很有帮助。
我分两步解决了问题,
1.在我的豆子中添加了以下豆子
Configuration-没有这些豆子,将无法正常工作。
@Beanpublic MethodValidationPostProcessor methodValidationPostProcessor() { MethodValidationPostProcessor mvProcessor = new MethodValidationPostProcessor(); mvProcessor.setValidator(validator()); return mvProcessor;}@Beanpublic LocalValidatorFactoryBean validator() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setProviderClass(Hibernatevalidator.class); validator.afterPropertiesSet(); return validator;}2.将Spring的@Validated注释放置在我的控制器上,如下所示,
@RestController@RequestMapping("/...")@Validatedpublic class MyRestController {}验证为-
org.springframework.validation.annotation.Validated
此设置不会影响在同一控制器中
@Valid进行
@RequestBody验证的注释,并且注释仍将继续工作。
因此,现在,我可以针对
MyRestController类中的方法触发以下验证,
@RequestMapping(method = RequestMethod.GET, value = "/testValidated" , consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)public ResponseBean<String> testValidated( @Email(message="email RequestParam is not a valid email address") @NotEmpty(message="email RequestParam is empty") @RequestParam("email") String email) { ResponseBean<String> response = new ResponseBean<>(); .... return response; }我必须在异常处理程序中添加另一个处理程序以处理异常-
ConstraintViolationException尽管由于在
@Validated抛出时
@Valid会抛出此异常
MethodArgumentNotValidException



