验证(@Valid)二维列表(List <list <x>&gt;)

时间:2015-07-06 15:55:06

标签: java validation jersey bean-validation hibernate-validator

我有一个班级X

class X {
    @NotNull
    @NotEmpty
    private final String name;

    @JsonValue
    public String name() {
        return name;
    }

    @JsonCreator
    public X(final String name) {
        this.name = name;
    }
}

在另一堂课中,我有以下内容:

class Input {
    @Valid
    @JsonProperty("data")
    private List<List<X>> data;
}

我正在使用Jersey解析JSON输入文件并使用Hibernate Validator进行验证。似乎没有执行验证 - 接受空字符串。

"data": [
  [
    ""
  ],
  [
    "name",
    "location"
  ]
]

2 个答案:

答案 0 :(得分:1)

Bean Validation不支持此用例。 @Valid上的List<List<X>> data;注释将指示验证程序迭代每个List<X>元素并检查其有效性。为此,将检查类List的bean验证约束,这些约束不存在(您的约束在X上)。 @Valid不是任何形式的递归。

解决方法是使用您自己的包装器类来托管X实例列表。在这个包装器类中,您可以使用@Valid注释包装列表。

答案 1 :(得分:1)

您可以编写自己的注释来检查项目顶部的二维列表:

https://github.com/jirutka/validator-collection

它展示了如何验证集合中的元素。它可能对您的情况有所帮助,因为 jsr303和jsr349都没有为您提供开箱验证的可能性