我正在使用JSR 303,并编写了许多注释,因此我熟悉使自定义约束生效的过程。
我刚遇到一个问题,我不确定是否能优雅地解决。这里的对象仅用于说明!因此,我有一个祖父对象,它有一个子对象列表。每个孩子都有自己的孩子列表(显然是祖父母的孙子女)。可以使用@Size限制此列表的大小。但是,我需要限制祖父母的(孙)子女的总数,以便如果我验证祖父母实例,则它们在所有孩子中被限制为50个孙子女。奇怪的例子,我知道:-)
我通过在祖先中创建一个方法来开始处理此问题,该方法简单地计算祖先的孩子列表中的孩子列表中的所有元素的数量,并添加一个简单的@Size注释。这感觉有点丑陋-添加一个仅用于提供某些验证的方法。难道这不是JSR应该解决的一部分吗?
或者-创建一个自定义注释,如下所示:
@CustomListSize(listName="children.children", min=0, max=50)
Grandparent
--> List<Child> children
@Size(min=0, max=5)
-->List<Child> children
--> List<Object> list1
-->List<Object> list2
我可以通过反射/propertydescriptor获取这个值并检查最小/最大值。这样做听起来可以,但是否有更好的方法在JSR 303中?这种方法也可以,但需要更多的代码,仍然不理想。
最后,如果我想在list2中的条目数量上进行相同的检查怎么办?我不能重复CustomListSize,所以该如何处理 - 创建一个内部列表?
谢谢
克里斯