Java注释:通过注释验证列表中的基元

我希望能够验证列表中的原语,我想知道是否有一种标准的方法.例如,验证列表中字符串的大小.

一个例子:

@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约束.

点赞