【问题标题】:Bean validation size of a List?List的Bean验证大小?
【发布时间】:2017-10-21 20:55:13
【问题描述】:

如何设置 List 至少包含 1 且最多包含 10 个元素的 bean 验证约束?

以下均无效:

@Min(1)
@Max(10)
@Size(min=1, max=10)
private List<String> list;

【问题讨论】:

  • 对我来说,@Size 完美无缺。你能告诉我们你验证它的代码吗?你使用 import javax.validation.constraints.Size 了吗?

标签: java bean-validation


【解决方案1】:

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

【讨论】:

  • @NotEmpty 只能应用于疼痛String
  • 来自 Hibernate 验证器文档:@NotEmpty 支持的数据类型 CharSequence、Collection、Map 和数组
  • 由于不推荐使用 Hibernate @NotEmpty 注释,您现在应该使用 javax.validation.constraints.NotEmpty
【解决方案2】:

我创建了简单的类:

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;
    }

}

并测试:

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());

看来@Size 注释运行良好。来自javax.validation.constraints.Size

【讨论】:

  • 知道了:我正在使用spring-mvc,如果在输入参数中完全定义了列表,则验证仅适用于List(我只是在我的请求,因为我设置了 min=1)。如果列表应该始终存在并且至少有一个项目,则解决方案是结合使用@NotNull@Size
  • @SledgeHammer 你能打开另一个问题并输入一些无法检查的代码吗?
猜你喜欢
  • 2022-07-01
  • 2019-08-17
  • 2011-01-29
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2020-12-31
相关资源
最近更新 更多