我有一个班级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"
]
]
答案 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都没有为您提供开箱验证的可能性