我正在尝试使用Java验证约束(@ NonNull,@ Min等)来改进和简化部分代码,但是在我的代码中有一种重复出现的情况,我无法弄清楚如何使用约束注释。
这是一个例子:
public class ResourceIdentifier {
public enum ResourceType { ARTICLE, USER, COMMENT }
private @Getter @Setter String id;
private @Getter @Setter ResourceType type;
}
然后,我想验证MyCommand对象,以便
resourceId
不为null,并且resourceId.type
只能为ARTICLE
或COMMENT
。public class MyCommand {
@NotNull
@Validate(path="#resourceId.type", values={ResourceIdentifier.ResourceType.ARTICLE, ResourceIdentifier.ResourceType.COMMENT})
private ResourceIdentifier resourceId;
(...)
}
我相信我可以通过自定义约束验证注释和反射来实现。
还有其他简单的方法吗?
编辑:想象我有10-20其他Command类要求类型相同的验证
resourceId.type = {}
最佳答案
您可以只使用断言约束(这是MyCommand
中的方法):
@AssertTrue(message="Only Comment and Article are allowed as resource type")
public boolean isResourceIdValid() {
return this.resourceId.getType() == ResourceIdentifier.ResourceType.ARTICLE
|| this.resourceId.getType() == ResourceIdentifier.ResourceType.COMMENT;
}