我希望能够验证列表中的原语,我想知道是否有一种标准的方法.例如,验证列表中字符串的大小.
一个例子:
@Size(max = 64) // validates that a string is max 64 chars.
private String name;
@Size(max = 64) // validates that the list size is max 64 items.
private List<String> names;
// What I want:
@ValidateInsidePrimitives(
@Size(max = 64)
)
private List<String> names;
我见过人们做的是将基元包装到一个对象中这样做:
@Valid
private List<NameObj> names;
或者制作验证字符串列表的自定义注释:
@MyCustomListStringSizeAnnotation(max = 64)
private List<String> names;
或者使用java 8新的注释放置,如下所示:
private List<@Size(max = 64) String> names;
但我真的不喜欢前两种方法,我不能将我的应用程序移植到java 8.
在我看来,我上面起草的“@ValidateInsidePrimitives”应该可以工作(在所有* .List注释确实需要注释之后),但我无法找到类似的东西.有任何想法吗?
最佳答案 @ValidateInsidePrimitives的问题在于它无法以通用方式实现.
注释成员(例如value())只能将特定的其他注释类型作为类型,而不能具有java.lang.annotation.Annotation(这就是为每个BV内置约束存在专用@List约束的原因).因此,您可以为@Size实现@ValidateInsidePrimitives,但必须为支持的其他基本约束实现这一点.
如果还不能迁移到Java 8,最好还是实现自定义@MyCustomListStringSizeAnnotation约束.