java - 验证空值的成员列表变量
问题描述
我拥有的结构如下所示:
Class A{
String str;
int i;
List<B> bs;
C c;
@NotNull
List<D> ds;
}
Class B{
@NotNull
List<E> es;
}
Class C{
List<String> s;
}
Class E{
@NotNull
List<String> s;
}
对于使用@NotNull 注释的列表变量,如果其中任何一个变量具有一个或多个空对象,我需要抛出验证错误。而对于其他列表变量,我只需要删除空值;实现这一目标的最佳方法是什么?
解决方案
您应该定义自定义注释以进行验证。
所以定义自定义注释,如下所示。
@Target({ElementType.FIELD, ElementType.PARAMETER,ElementType.ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = ValidateListValidator.class)
@Documented
public @interface ValidateList {
}
并ValidateListValidator
像这样实现:
public class ValidateListValidator implements ConstraintValidator<ValidateList, List<Object>> {
private ValidateList validateList;
@Override
public void initialize(ValidateList validateList) {
this.validateList = validateList;
}
@Override
public boolean isValid( List<Object> list, ConstraintValidatorContext constraintValidatorContext) {
return list.stream().noneMatch(Objects::isNull);
}
}
并进行测试
@Test
public void test() {
boolean valid = validator.isValid(Arrays.asList("test","this",null),context);
assertThat(valid, is(false));
}
推荐阅读
- spring-boot - Spring WebClient 作为 RestTemplate 的替代品
- hive - Hive - 仅获取一个或多个 hive 表的最新分区
- ruby-on-rails - RabbitMQ + Sneakers:一个工人还是 100 个?
- node.js - 停止 webpack 在文件底部添加脚本标签
- javascript - 过滤嵌套数组以获取特定值
- javascript - 如何使触发模式弹出窗口的按钮保持悬停状态?
- spring-cloud - Spring Cloud Consumer 参数有效负载始终获取字节数组对象
- php - for循环内部foreach循环php
- java - 来自授权码交换的 invalid_grant 响应
- c++ - 从父类方法返回子类对象