Mak*_*sim 5 java validation spring spring-mvc
我无法使用Spring MVC进行自定义验证。我为参数实现了自己的注释,并为其实现了自定义验证器(所有功能均在下面给出),但是验证从未发生。任何想法将不胜感激。
控制者
@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";
}
}
Run Code Online (Sandbox Code Playgroud)
自定义请求参数
@Documented
@Constraint(validatedBy = CustomValidator.class)
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomParam {
String message() default "Wrong!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
自定义验证器
@Component
public class CustomValidator implements ConstraintValidator<CustomParam, String> {
@Override
public void initialize(CustomParam param) {}
@Override
public boolean isValid(String givenParam, ConstraintValidatorContext context) {
// some custom validation is here, never enter this method though
}
}
Run Code Online (Sandbox Code Playgroud)
看来我这里出了什么问题。因为我使用Spring Boot,所以它默认使用hibernate validator。为了解决这个问题,我遵循了这个答案,只是通过添加 bean 更改了我的 Spring 配置。
@Bean
public Validator validator() {
return new LocalValidatorFactoryBean();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator());
return methodValidationPostProcessor;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3530 次 |
| 最近记录: |