JSR-303 Bean Validation注释多个字段
我刚刚开始测试JSR-303 Beanvalidation,并想知道是否有可能。 我们的app中有一个默认的正则表达式,用于所有String字段。 如果我想使用beanvalidation来应用它,我想我需要在表单对象中注释每个字段。
@Pattern(regexp = REG_EXP) private String aString; @Pattern(regexp = REG_EXP) private String anotherString;
是否可以在一次点击中将@Pattern应用于所有字符串(或某些字段)? 我们在Weblogic 10.3.4上使用Hibernate实现,JSF2.0作为前端。 validation应该独立于视图,因为我可能从Web服务进入。
要一次validation多个字段,请在type-Level上使用注释,并编写一个自定义Validator,使用您的REGEXP检查所有String字段。
编辑:提供示例。 这非常难看,因为它使用Reflection并违反安全性,但也许它会给你一个大致的想法。 如果你不使用“对象”而是使用具体的类或接口,你可能会成功使用常规的getter。
被测class(和跑步者)
import javax.validation.Validation; import javax.validation.Validator; import validation.AllStringsRegex; @AllStringsRegex(value="l") public class UnderValidation { String a; String b; public static void main(String... args) { UnderValidation object = new UnderValidation(); object.a = "hello"; object.b = "world"; Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); System.out.println(validator.validate(object)); } }
我的注释:
@Target( { TYPE, ANNOTATION_TYPE }) @Retention(RUNTIME) @Constraint(validatedBy = AllStringsRegexValidator.class) @Documented public @interface AllStringsRegex { String message() default "String not regex"; String value() default ""; Class>[] groups() default {}; Class extends Payload>[] payload() default {}; }
我的validation员
public class AllStringsRegexValidator implements ConstraintValidator { private Pattern pattern = null; @Override public void initialize(AllStringsRegex annotation) { pattern = Pattern.compile(annotation.value()); } @Override public boolean isValid(Object object, ConstraintValidatorContext ctx) { for (Field f : object.getClass().getDeclaredFields()) { if (f.getType().equals(String.class)) { try { f.setAccessible(true); String value = (String)f.get(object); if (!pattern.matcher(value).find()) { return false; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return true; } }
我没有使用但是java支持服务器端的脚本使用grovvy,javascript ..你可以检查@ScriptAssert(lang = "javascript", script =_this.startDate.before(_this.endDate)
脚本注释,它是hibernate注释。
- JSR303自定义validation器被调用两次
- Spring MVC – REST服务中bean列表上的@Valid
- 与Bean Validation API结合使用时,Hibernate不遵循JPA规范吗?
- 如何在struts2中使用@Valid注释触发validation?
- Hibernate Validator – @Length – 如何为min和max指定单独的消息?
- 如何使用@DecimalMin和@DecimalMaxvalidationList ?
- Java Bean Validation(JSR303)约束涉及几个bean属性之间的关系
- ValidationMessages.properties文件之间的冲突
- JPA – 找不到类型为enum的validation器