在List <String>上添加@NotNull或Pattern约束

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)

参考文献:


Jak*_*tka 8

您不必使用任何包装类来验证字符串列表.只需使用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答案.

  • 不确定我是否会提倡使用第三方库来验证字符串列表。 (2认同)

ach*_*ach 6

您可以为电子邮件字符串创建一个简单的包装类:

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)

然后验证器将验证列表中的每个对象.