Abh*_*she 4 java validation json jsr hibernate-validator
我们如何确保列表中的各个字符串不为空/空或遵循特定模式
@NotNull
List<String> emailIds;
Run Code Online (Sandbox Code Playgroud)
我还想添加一个模式
@Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b.")
但我可以没有它.但我肯定希望有一个约束,它将检查列表中的任何字符串是否为空或空白.Json架构也将如何
"ids": {
"description": "The ids associated with this.",
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"required" :true }
}
"required" :true does not seem to do the job
Run Code Online (Sandbox Code Playgroud)
Bri*_*ace 14
Bean验证2.0(Hibernate Validator 6.0.1及更高版本)支持通过注释参数化类型的类型参数来验证容器元素.例:
List<@Positive Integer> positiveNumbers;
Run Code Online (Sandbox Code Playgroud)
甚至(虽然有点忙):
List<@NotNull @Pattern(regexp="\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\\b") String> emails;
Run Code Online (Sandbox Code Playgroud)
参考文献:
您不必使用任何包装类来验证字符串列表.只需使用validator-collection中的@EachPattern
约束:
@NotNull
@EachPattern(regexp="\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b.")
List<String> values;
Run Code Online (Sandbox Code Playgroud)
就这样.容易,对吗?有关更多信息,请参阅此 SO答案.
您可以为电子邮件字符串创建一个简单的包装类:
public class EmailAddress {
@Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b.")
String email;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
然后标记@Valid
现有对象中的字段:
@NotNull
@Valid
List<EmailAddress> emailIds;
Run Code Online (Sandbox Code Playgroud)
然后验证器将验证列表中的每个对象.