我有一个REST-Api,我想验证方法级别的参数。使用@Valid和一个自定义对象,其中验证注释在里面,它工作正常,但如果我使用String并将注释直接写入方法签名,它就会失败。
@Documented
@Constraint(validatedBy = {})
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Pattern(regexp = "^[A-Za-z]{5}[0-9]{3,128}$")
public @interface CustomValidator{
public abstract String message() default "Custom Message"
public abstract Class<?>[] groups() default {};
public abstract Class<?>[] payload() default {};
}
@RestController
public class MyController {
...
}
@Data
public class FoobarForm{
@NotNull
@CustomValidator
String foobar;
}
@RequestMapping(value = "/foo/{bar}", method = RequestMethod.GET)
public Bank checkFoobar(@Valid @CustomValidator @PathVariable String foobar) {
@RequestMapping(value = "/foo/{bar}", method = RequestMethod.GET)
public Bank checkIban(@Validated @NotNull @CustomValidator @PathVariable String foobar) {
如您所见,我想使用自定义Validator验证方法级别的String参数。但这不起作用。如果我在方法中放入了一个无效的参数,它就会通过,并且永远不会执行验证。
当然我可以用另一种方式检查正则表达式,因为它是一个路径变量,但我在其他方法中有相同的场景,并希望有一个解决这个问题的通用解决方案。
的信息: 我目前使用的是Spring Version:4.0.7