自定义字符串方法验证JSR 303 Spring MVC

时间:2015-01-30 10:13:35

标签: java spring validation spring-mvc bean-validation

我有一个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

0 个答案:

没有答案