java - Spring验证非空元素的字符串列表

标签 java spring validation java-8 spring-validator

我有一个包含字符串列表的模型类。该列表可以为空,也可以包含元素。如果它有元素,那些元素不能为空。例如,假设我有一个名为 QuestionPaper 的类,它有一个 questionId 列表,每个 questionId 都是一个字符串。

class QuestionPaper{
private List<String> questionIds;
....
}

论文可以有零个或多个问题。但如果有疑问,id 值不能为空字符串。我正在使用 SpringBoot、Hibernate、JPA 和 Java 编写微服务。我该如何进行验证。感谢您的帮助。

例如,我们需要拒绝来自用户的以下 json 输入。

{ "examId": 1, "questionIds": [ "", " ", "10103" ] }

是否有任何开箱即用的方法来实现这一点,或者我必须为此编写一个自定义 validator 。

最佳答案

自定义验证注释应该不是问题:

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

附言没有测试逻辑,但我想这很好。

关于java - Spring验证非空元素的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39504205/

相关文章:

java - Swing 中图像的形状属性

java - Retrofit 2 调用覆盖

java - 初始化类变量时类变量的类加载顺序

java - 如何停止数据库重试连接?使用 c3po

java - Quartz NotSerializedException 异常

java - JSR 303 ConstraintViolationException 和详细消息

java - 将php页面引入java代码中

java - Ajax 请求 - 在 Spring Controller 上调用不同的方法

asp.net - 提交按钮不会触发服务器端代码

javascript - 我可以制作一个共享的reactjs验证组件吗?