【问题标题】:Java custom annotationJava 自定义注解
【发布时间】:2014-01-13 11:26:55
【问题描述】:
我想创建一个自定义注释来验证我的 ManagedBean 中的属性
比如@StartWithUpperCase
public @interface StartWithUpperCase{
//
}
我使用 manegedBean 类的注释,例如:
public class myBean implements java.io.Serializable{
@StartWithUpperCase
@NotNull
private name;
}
我该怎么做。
【问题讨论】:
标签:
java
jpa
annotations
jpa-2.0
managed-bean
【解决方案1】:
您可以使用带有 jsf 的自定义验证器在没有注释的情况下实现它,但是从 jsf 2.0 开始,您可以使用 bean 验证,并且可以使用注释创建自定义约束,我发现了一个非常好的 example 可以满足您的需求。
【解决方案2】:
首先将@Constraint 注释放在您的自定义验证注释类上。正如您在 javadoc 中看到的,@Constraint 需要一个实现 ConstraintValidator 的验证实现类。
您的自定义注解类必须具备:
-
String message() 属性
-
Class<?>[] groups() default {} 属性
-
Class<? extends Payload>[] payload() default {} 属性
如果您愿意,它可以具有特定于您的验证实现的其他属性。
如果您希望注释的消息可本地化,Bean Validation 框架通过查找完全限定名称为"ValidationMessages" 的ResourceBundle 来支持国际化消息。约束注释的属性可以通过在大括号中包含 ResourceBundle 键来使用该 ResourceBundle,例如 String message() default "{StartWithUpperCase_message}";。