不同类型的自定义约束(验证器)

dtrunk

在前端,有一个包含一个包含一些选项的选择框的表单。该模型包含一个字段,该字段将通过我的自定义约束进行验证:

private @Options(values=OptionKeys.SALUTATIONS) String salutation;

哪个很棒。现在,我想在前端使用以下片段的复选框或多值选择框:

private @Options(values=OptionKeys.INTERESTS, optional=true) String[] interests;

这是约束接口和验证器代码:

@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = OptionsValidator.class)
@Documented
public @interface Options {
    String message() default "{com.example.web.form.constraints.Options.message}";
    Class<? extends Payload>[] payload() default {};
    Class<?>[] groups() default {};
    boolean optional() default false;
    OptionKeys values();
}

public class OptionsValidator implements ConstraintValidator<Options, String> {

    private List<String> values;
    private boolean optional;

    @Override
    public void initialize(Options params) {
        values = Arrays.asList(params.values().data);
        optional = params.optional();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        if (optional && StringUtils.isBlank(value)) {
            return true;
        }

        return value != null && values.contains(value);
    }

}

public static enum OptionKeys {
    SALUTATIONS(new String[] {
            "m",
            "f"
    }),

    INTERESTS(new String[] {
            "dummy"
    });

    public final String[] data;
    OptionKeys(String[] data) {
        this.data = data;
    }
}

是否有可能以某种方式扩展验证器以检查String[]值,还是我必须写另一个(例如@MultiOptions)?

dtrunk

一个人可以使用Object并检查其类型instanceof

public class OptionsValidator implements ConstraintValidator<Options, Object> {
    private List<String> values;
    private boolean optional;

    @Override
    public void initialize(Options params) {
        values = Arrays.asList(params.values().data);
        optional = params.optional();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
        if (optional && value == null) {
            return true;
        }

        if (value instanceof String[]) {
            String[] valArray = (String[]) value;
            if (!optional && valArray.length == 0) {
                return false;
            }

            for (String val : valArray) {
                if (!values.contains(val)) {
                    return false;
                }
            }

            return true;
        } else if (value instanceof String) {
            String val = (String) value;
            if (optional && val.trim() == "") {
                return true;
            }

            return val != null && values.contains(val);
        }

        return false;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在symfony表单类型中使用自定义约束/验证器

来自分类Dev

在symfony表单类型中使用自定义约束/验证器

来自分类Dev

Java约束验证器-如何从我的自定义验证器调用默认约束验证器?

来自分类Dev

由于自定义约束验证器,验证器单元测试失败

来自分类Dev

MultipartFile的自定义约束验证批注

来自分类Dev

连接两种不同类型的表时在Tableau中进行自定义聚合

来自分类Dev

如何在自定义约束验证器中使用注释元素

来自分类Dev

Autowired在“自定义约束”验证器中给出Null值

来自分类Dev

编写通用FluentValidation自定义验证器以检查唯一约束

来自分类Dev

如何在自定义约束验证器中使用注释元素

来自分类Dev

当由组合约束 @NotBlank 注释时,自定义验证器不起作用(完全)

来自分类Dev

为什么我的自定义约束验证器会抛出空指针?

来自分类Dev

如何使用自定义远程验证器验证MVC中列表中不同的字段对?

来自分类Dev

从自定义验证器中的验证上下文的基本类型中获取价值

来自分类Dev

Java Bean验证:如何指定相同类型但具有不同组的多个验证约束?

来自分类Dev

Symfony 5约束验证:自定义错误消息

来自分类Dev

Symfony自定义验证约束传递参数

来自分类Dev

ActiveModel验证自定义设置器

来自分类Dev

JAXB自定义验证器

来自分类Dev

WTForm自定义内联验证器

来自分类Dev

角形自定义验证器

来自分类Dev

Spring MVC自定义验证器

来自分类Dev

Proptypes 自定义验证器与 Flow

来自分类Dev

带参数的自定义验证器

来自分类Dev

不同类型的独特约束

来自分类Dev

验证未在自定义验证器中调用

来自分类Dev

Spring MVC验证器注释+自定义验证

来自分类Dev

带有验证助手的自定义验证器

来自分类Dev

注册自定义约束

Related 相关文章

  1. 1

    在symfony表单类型中使用自定义约束/验证器

  2. 2

    在symfony表单类型中使用自定义约束/验证器

  3. 3

    Java约束验证器-如何从我的自定义验证器调用默认约束验证器?

  4. 4

    由于自定义约束验证器,验证器单元测试失败

  5. 5

    MultipartFile的自定义约束验证批注

  6. 6

    连接两种不同类型的表时在Tableau中进行自定义聚合

  7. 7

    如何在自定义约束验证器中使用注释元素

  8. 8

    Autowired在“自定义约束”验证器中给出Null值

  9. 9

    编写通用FluentValidation自定义验证器以检查唯一约束

  10. 10

    如何在自定义约束验证器中使用注释元素

  11. 11

    当由组合约束 @NotBlank 注释时,自定义验证器不起作用(完全)

  12. 12

    为什么我的自定义约束验证器会抛出空指针?

  13. 13

    如何使用自定义远程验证器验证MVC中列表中不同的字段对?

  14. 14

    从自定义验证器中的验证上下文的基本类型中获取价值

  15. 15

    Java Bean验证:如何指定相同类型但具有不同组的多个验证约束?

  16. 16

    Symfony 5约束验证:自定义错误消息

  17. 17

    Symfony自定义验证约束传递参数

  18. 18

    ActiveModel验证自定义设置器

  19. 19

    JAXB自定义验证器

  20. 20

    WTForm自定义内联验证器

  21. 21

    角形自定义验证器

  22. 22

    Spring MVC自定义验证器

  23. 23

    Proptypes 自定义验证器与 Flow

  24. 24

    带参数的自定义验证器

  25. 25

    不同类型的独特约束

  26. 26

    验证未在自定义验证器中调用

  27. 27

    Spring MVC验证器注释+自定义验证

  28. 28

    带有验证助手的自定义验证器

  29. 29

    注册自定义约束

热门标签

归档