Rav*_*ala 9 java validation spring java-8 spring-validator
我有一个包含字符串列表的模型类.列表可以为空或包含元素.如果它有元素,那么这些元素不能为空.举个例子,假设我有一个叫做QuestionPaper的类,它有一个questionIds列表,每个都是一个字符串.
class QuestionPaper{
private List<String> questionIds;
....
}
Run Code Online (Sandbox Code Playgroud)
论文可以有零个或多个问题.但如果有问题,则id值不能为空字符串.我正在使用SpringBoot,Hibernate,JPA和Java编写一个微服务.我该怎么做这个验证.任何帮助表示赞赏.
举个例子,我们需要拒绝来自用户的以下json输入.
{ "examId": 1, "questionIds": [ "", " ", "10103" ] }
Run Code Online (Sandbox Code Playgroud)
是否有任何开箱即用的方法来实现这一目标,或者我是否必须为此编写自定义验证器.
小智 20
I just had similar case to solve
class QuestionPaper {
@NotEmpty
private List<@NotBlank String> questionIds;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*zic 18
自定义验证注释应该不是问题:
@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());
}
}
Run Code Online (Sandbox Code Playgroud)
用法?简单:
class QuestionPaper{
@NotEmptyFields
private List<String> questionIds;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
PS没有测试逻辑,但我猜它很好.
归档时间: |
|
查看次数: |
12758 次 |
最近记录: |