Spring 验证非空元素的字符串列表
Spring Validate List of Strings for non empty elements
我有一个模型 class,其中包含字符串列表。该列表可以为空,也可以包含元素。如果它有元素,那些元素不能为空。例如,假设我有一个名为 QuestionPaper 的 class,它有一个 questionIds 列表,每个都是一个字符串。
class QuestionPaper{
private List<String> questionIds;
....
}
论文可以有零个或多个问题。但如果有疑问,id 值不能为空字符串。我正在使用 SpringBoot、Hibernate、JPA 和 Java 编写微服务。我该如何进行验证。感谢任何帮助。
例如,我们需要拒绝用户的以下 json 输入。
{ "examId": 1, "questionIds": [ "", " ", "10103" ] }
是否有任何开箱即用的方法来实现这一点,或者我必须为此编写一个自定义验证器。
这些可能足以满足需要,如果它只是在 null 或空 space。
@NotNull, @Valid, @NotEmpty
您可以与example. Complete set of validations - JSR 303核对一下,给出符合要求的想法。
!CollectionUtils.isEmpty(questionIds)
&& !questionIds.stream.anyMatch(StringUtils::isEmpty())
自定义验证注释应该不是问题:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotEmptyFieldsValidator.class)
public @interface NotEmptyFields {
String message() default "List cannot contain empty fields";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class NotEmptyFieldsValidator implements ConstraintValidator<NotEmptyFields, List<String>> {
@Override
public void initialize(NotEmptyFields notEmptyFields) {
}
@Override
public boolean isValid(List<String> objects, ConstraintValidatorContext context) {
return objects.stream().allMatch(nef -> nef != null && !nef.trim().isEmpty());
}
}
用法?简单:
class QuestionPaper{
@NotEmptyFields
private List<String> questionIds;
// getters and setters
}
P.S。没有测试逻辑,但我想它很好。
如果您使用
,这个问题很容易解决
import org.apache.commons.collections.CollectionUtils;
QuestionPaper question = new QuestionPaper();
question.setQuestionIds(Arrays.asList("", " ", "10103"));
if(CollectionUtils.isNotEmpty(question.getQuestionIds())) {
// proceed
} else {
//throw exception or return
}
这将检查 nontnull 和 notempty。
我刚刚有类似的案例需要解决
class QuestionPaper {
@NotEmpty
private List<@NotBlank String> questionIds;
// getters and setters
}
如果List是Integers,则如下
class QuestionPaper {
@NotEmpty
private List<@Min(0) Integer> questionIds;
// getters and setters
}
我有一个模型 class,其中包含字符串列表。该列表可以为空,也可以包含元素。如果它有元素,那些元素不能为空。例如,假设我有一个名为 QuestionPaper 的 class,它有一个 questionIds 列表,每个都是一个字符串。
class QuestionPaper{
private List<String> questionIds;
....
}
论文可以有零个或多个问题。但如果有疑问,id 值不能为空字符串。我正在使用 SpringBoot、Hibernate、JPA 和 Java 编写微服务。我该如何进行验证。感谢任何帮助。
例如,我们需要拒绝用户的以下 json 输入。
{ "examId": 1, "questionIds": [ "", " ", "10103" ] }
是否有任何开箱即用的方法来实现这一点,或者我必须为此编写一个自定义验证器。
这些可能足以满足需要,如果它只是在 null 或空 space。
@NotNull, @Valid, @NotEmpty
您可以与example. Complete set of validations - JSR 303核对一下,给出符合要求的想法。
!CollectionUtils.isEmpty(questionIds)
&& !questionIds.stream.anyMatch(StringUtils::isEmpty())
自定义验证注释应该不是问题:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotEmptyFieldsValidator.class)
public @interface NotEmptyFields {
String message() default "List cannot contain empty fields";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class NotEmptyFieldsValidator implements ConstraintValidator<NotEmptyFields, List<String>> {
@Override
public void initialize(NotEmptyFields notEmptyFields) {
}
@Override
public boolean isValid(List<String> objects, ConstraintValidatorContext context) {
return objects.stream().allMatch(nef -> nef != null && !nef.trim().isEmpty());
}
}
用法?简单:
class QuestionPaper{
@NotEmptyFields
private List<String> questionIds;
// getters and setters
}
P.S。没有测试逻辑,但我想它很好。
如果您使用
,这个问题很容易解决import org.apache.commons.collections.CollectionUtils;
QuestionPaper question = new QuestionPaper();
question.setQuestionIds(Arrays.asList("", " ", "10103"));
if(CollectionUtils.isNotEmpty(question.getQuestionIds())) {
// proceed
} else {
//throw exception or return
}
这将检查 nontnull 和 notempty。
我刚刚有类似的案例需要解决
class QuestionPaper {
@NotEmpty
private List<@NotBlank String> questionIds;
// getters and setters
}
如果List是Integers,则如下
class QuestionPaper {
@NotEmpty
private List<@Min(0) Integer> questionIds;
// getters and setters
}