RequestParam的自定义validation不适用于Spring MVC
我无法使用Spring MVC进行自定义validation。 我为它实现了自己的参数和自定义validation器注释(所有都在下面给出),但validation永远不会发生。 任何想法都会非常感激。
调节器
@Validated @RestController public class FooController { @RequestMapping(value = "/somepath", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) public String get(@CustomParam @RequestParam(String fooParam) { return "Hello"; } }
自定义请求参数
@Documented @Constraint(validatedBy = CustomValidator.class) @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface CustomParam { String message() default "Wrong!"; Class[] groups() default {}; Class[] payload() default {}; }
自定义validation器
@Component public class CustomValidator implements ConstraintValidator { @Override public void initialize(CustomParam param) {} @Override public boolean isValid(String givenParam, ConstraintValidatorContext context) { // some custom validation is here, never enter this method though } }
似乎我在这里弄错了。 因为我使用Spring Boot,所以它默认使用hibernatevalidation器。 为了解决这个问题,我遵循了这个答案,并通过添加bean来改变我的Spring配置。
@Bean public Validator validator() { return new LocalValidatorFactoryBean(); } @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor(); methodValidationPostProcessor.setValidator(validator()); return methodValidationPostProcessor; }