二维列表(List<List<X>>)的校验(@Valid)
Validation (@Valid) of two-dimensional list (List<List<X>>)
我有一个 class 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 中,我有以下内容:
class Input {
@Valid
@JsonProperty("data")
private List<List<X>> data;
}
我正在使用 Jersey 解析 JSON 输入文件并使用 Hibernate Validator 进行验证。似乎没有执行验证 - 接受了一个空字符串。
"data": [
[
""
],
[
"name",
"location"
]
]
Bean 验证不支持此用例。 List<List<X>> data;
上的 @Valid
注释将指示验证器迭代每个 List<X>
元素并检查其有效性。为此,将检查 class List
是否存在不存在的 bean 验证约束(您的约束在 X
上)。 @Valid
不是任何形式的递归。
解决方法是使用您自己的包装器 class 来托管 X
实例列表。在这个包装器 class 中,您可以用 @Valid
注释包装列表。
您可以编写自己的注释来检查项目顶部的二维列表:
https://github.com/jirutka/validator-collection
它展示了如何验证集合中的元素。它可能对您的情况有所帮助,因为 jsr303 和 jsr349 都不能让您开箱即用地进行验证
我有一个 class 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 中,我有以下内容:
class Input {
@Valid
@JsonProperty("data")
private List<List<X>> data;
}
我正在使用 Jersey 解析 JSON 输入文件并使用 Hibernate Validator 进行验证。似乎没有执行验证 - 接受了一个空字符串。
"data": [
[
""
],
[
"name",
"location"
]
]
Bean 验证不支持此用例。 List<List<X>> data;
上的 @Valid
注释将指示验证器迭代每个 List<X>
元素并检查其有效性。为此,将检查 class List
是否存在不存在的 bean 验证约束(您的约束在 X
上)。 @Valid
不是任何形式的递归。
解决方法是使用您自己的包装器 class 来托管 X
实例列表。在这个包装器 class 中,您可以用 @Valid
注释包装列表。
您可以编写自己的注释来检查项目顶部的二维列表:
https://github.com/jirutka/validator-collection
它展示了如何验证集合中的元素。它可能对您的情况有所帮助,因为 jsr303 和 jsr349 都不能让您开箱即用地进行验证