创建运行时约束并验证字段图

问题描述

我有一个输入字段图,我想通过在运行时创建动态约束来使用JSR-303进行验证。

比方说,我的地图结构如下:

name: Foo
description: Foo description

现在,如果我在一组配置中存储了一组规则,则说:

name:
    required: true
    minLength: 3
    maxLength: 30

description:
    required: false
    maxLength: 200

我想使用在运行时根据上述配置创建的约束来验证输入映射。我知道我们可以create custom ConstraintMappings using Hibernate Validator进行以下操作(示例取自Hibernate Validator文档):

HibernateValidatorConfiguration configuration = Validation
    .byProvider(HibernateValidator.class)
    .configure();

ConstraintMapping constraintMapping = configuration.createConstraintMapping();

constraintMapping
    .type(Car.class)
        .property("manufacturer",FIELD)
            .constraint( new NotNullDef())
        .property("licensePlate",FIELD)
            .ignoreAnnotations(true)
            .constraint(new NotNullDef())
            .constraint(new SizeDef().min(2).max(14))

Validator validator = configuration.addMapping(constraintMapping)
        .buildValidatorFactory()

但是显然,这不适用于java.util.Map,因为地图不是JavaBean。那么我该怎么做呢?我考虑过的几件事(与每种方法有关):

  1. 要在运行时使用ByteBuddy或类似的东西创建类,并使用它来使用Hibernate Validator进行验证(听起来像是过分杀伤)
  2. 要使用一系列if条件进行手动验证并抛出ConstraintViolationException(我将在这里重新发明很多轮子)

我想了解在这种情况下您会怎么做。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)