我有一个模型类,其中包含字符串列表。该列表可以为空,也可以包含元素。如果它有元素,这些元素不能为空。举个例子,假设我有一个名为 QuestionPaper 的类,它有一个 QuestionId 列表,其中每个都是一个字符串。
class QuestionPaper{
private List<String> questionIds;
....
}
论文可以有零个或多个问题。但如果有问题,id值不能为空字符串。我正在使用 SpringBoot、Hibernate、JPA 和 Java 编写一个微服务。我该如何进行此验证。任何帮助表示赞赏。
例如,我们需要拒绝用户的以下 json 输入。
{ "examId": 1, "questionIds": [ "", " ", "10103" ] }
是否有任何开箱即用的方法可以实现此目的,或者我必须为此编写一个自定义验证器。
自定义验证注释应该不是问题:
@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
}
附:没有测试逻辑,但我认为它很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)