列表的Bean验证大小?

mem*_*und 19 java bean-validation

如何设置一个bean验证约束,它List应该至少包含1并且最多包含10个元素?

以下都不起作用:

@Min(1)
@Max(10)
@Size(min=1, max=10)
private List<String> list;
Run Code Online (Sandbox Code Playgroud)

Bye*_*Bye 19

我创建了简单的类:

public class Mock {

    @Size(min=1, max=3)
    private List<String> strings;

    public List<String> getStrings() {
        return strings;
    }

    public void set(List<String> strings) {
        this.strings = strings;
    }

}
Run Code Online (Sandbox Code Playgroud)

并测试:

Mock mock = new Mock();
mock.setStrings(Collections.emptyList());
final Set<ConstraintViolation<Mock>> violations1 = Validation.buildDefaultValidatorFactory().getValidator().validate(mock);
assertFalse(violations1.isEmpty());

mock.setStrings(Arrays.asList("A", "B", "C", "D"));
final Set<ConstraintViolation<Mock>> violations2 = Validation.buildDefaultValidatorFactory().getValidator().validate(mock);
assertFalse(violations2.isEmpty());
Run Code Online (Sandbox Code Playgroud)

似乎@Size注释运作良好.它来自javax.validation.constraints.Size

  • 得到它:我正在使用`spring-mvc`,如果在输入参数中完全定义了列表,则验证仅应用于`List`(我只是在我的请求中省略了列表,因为我设置了min = 1).如果列表应该始终存在并且至少有一个项目,解决方案是结合使用`@NotNull`` @ Size`. (7认同)

小智 7

您可以使用 @NotEmpty 检查空列表。这确保列表中至少有一项。

  • 由于 Hibernate @NotEmpty 注释已被弃用,您现在应该使用 javax.validation.constraints.NotEmpty (2认同)