Hibernate Validator:在constraints.xml中使用常量

时间:2013-12-06 10:01:39

标签: hibernate-validator

我使用Hibernate Validator作为JSR-303验证提供程序及其xml样式约束描述。 所以,我有一个

<bean class="com.my.User" ignore-annotations="true">
  <field name="email">
     <constraint annotation="javax.validation.constraints.Pattern">
         <element name="regexp"><![CDATA[[A-Za-z0-9\._%+-]{1,64}@[A-Za-z0-9.-]+\.[A-Za-  
                                   z]{2,4}]]></element>
     </constraint>
  </field>
  .....
</bean>

我还有一个单独的类,其中包含我的所有模式

public final class Regexps {
 public static final String EMAIL_REGEXP = "A-Za-z0-9\._%+-]{1,64}@[A-Za-z0-9.-]+\.[A-  
                                 Za-z]{2,4}";
 ....
}

所以,正如你所看到的,我有两个地方,那里有电子邮件regexp,我只想要一个地方。

我的问题: 是否可以使用

public static final String EMAIL_REGEXP = "A-Za-z0-9\._%+-]{1,64}@[A-Za-z0-9.-]+\.[A-   
                                           Za-z]{2,4}";

xml中的字段,以便

我可以直接引用字符串字段。 所以我希望有类似的东西:

<bean class="com.my.User" ignore-annotations="true">
  <field name="email">
     <constraint annotation="javax.validation.constraints.Pattern">
         <element name="regexp">Regexps.EMAIL_REGEXP</element>
     </constraint>
  </field>
  .....
</bean>

顺便说一句,可以通过注释

public class User {
 @Pattern(regexp = Regexps.EMAIL_REGEXP)   
 private String email;
}

但是我无法使用注释,因为我使用了用于数据传输的旧版POJO,并且无法更改源代码。

1 个答案:

答案 0 :(得分:1)

目前,无法从XML约束映射中引用约束。不过,我认为这是一个好主意。您可以在issue tracker中打开功能请求,以便我们在那里讨论该功能吗?

如果你不能使用注释,你可以试试Hibernate Validator的API for programmatic constraint declaration,然后你可以使用模式的共享常量。