字段的杰克逊条件验证

星期天德阿布雷乌

我正在尝试使用以下结构在Spring上设置范围查询结构:

public class QueryRange extends Query {

    @JsonProperty(required = true)
    @NotBlank
    @NotNull
    private String field;

    private Object gt;

    private Object gte;

    private Object lt;

    private Object lte;

    public String getField() {
         return field;
    }

    public QueryRange setField(String field) {
        this.field = field;
        return this;
    }

    public Object getGt() {
        return gt;
    }

    public QueryRange setGt(Object gt) {
        this.gt = gt;
        return this;
    }

    public Object getGte() {
        return gte;
    }

    public QueryRange setGte(Object gte) {
        this.gte = gte;
        return this;
    }

    public Object getLt() {
        return lt;
    }

    public QueryRange setLt(Object lt) {
        this.lt = lt;
        return this;
    }

    public Object getLte() {
        return lte;
    }

    public QueryRange setLte(Object lte) {
        this.lte = lte;
        return this;
    }

    @AssertTrue(message = "Invalid range. A value for 'gt' or 'lt' should be set.")
    private boolean isRangeSpecified() {
        return this.gt != null || this.lt != null;
    }

    @AssertTrue(message = "Invalid range data type. 'gt' and 'lt' must be of the same type.")
    private boolean isRangeDataTypeValid() {
        if (this.gt != null && this.lt != null) {
            return this.gt.getClass().equals(this.lt.getClass());
        }

        return true;
    }
}

问题在于,值gt,gte,lt或lte中的至少一个不应为null。我该如何验证呢?

我已经在上面的代码示例中尝试了Bean验证,但是它没有用。有什么建议么?

填写

您应该使用类级别的约束。

最后但并非最不重要的一点,也可以在类级别上放置约束。在这种情况下,验证的对象不是单个属性,而是完整的对象。如果验证依赖于对象的多个属性之间的相关性,则类级别的约束很有用。

@ValidQueryRange
public class QueryRange extends Query {
    // your class here...
    private Object gt;

    private Object gte;

    private Object lt;

    private Object lte;
}

@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = { ValidQueryRangeValidator.class })
@Documented
public @interface ValidQueryRange {

    String message() default "{error}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}

public class ValidQueryRangeValidator implements ConstraintValidator<ValidQueryRange, QueryRange> {

    @Override
    public void initialize(ValidQueryRange constraintAnnotation) {
    }

    @Override
    public boolean isValid(QueryRange queryRange, ConstraintValidatorContext context) {
        if ( queryRange == null ) {
            return true;
        }
        // put your logic here
        if ( queryRange.getGt() == null || queryRange.getLt() == null) {
            return false;
        }

        return true;
    }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

杰克逊验证输入JSON对象

来自分类Dev

从杰克逊获取未知字段的列表

来自分类Dev

让杰克逊忽略地图中的字段

来自分类Dev

FasterXML杰克逊?

来自分类Dev

杰克逊的JSON(2.5.0)验证无法正常工作

来自分类Dev

如何通过杰克逊进行字符串验证?

来自分类Dev

配置杰克逊在缺少字段时引发异常

来自分类Dev

杰克逊(Jackson)无法识别的班级名称字段

来自分类Dev

杰克逊:@JsonCreator设置后写入的最终字段?

来自分类Dev

杰克逊:仅序列化标记的字段

来自分类Dev

如何找到字段(杰克逊)的JSON密钥?

来自分类Dev

杰克逊:根据字段类型添加后缀

来自分类Dev

杰克逊(Jackson)字段值,不带引号

来自分类Dev

杰克逊:@JsonCreator设置后写入的最终字段?

来自分类Dev

JPA id字段不被杰克逊序列化

来自分类Dev

杰克逊忽略了父级的所有字段

来自分类Dev

杰克逊有条件@JsonUnwrapped

来自分类Dev

杰克逊有条件@JsonUnwrapped

来自分类Dev

杰克逊投掷错误

来自分类Dev

处理杰克逊异常

来自分类Dev

杰克逊加工问题

来自分类Dev

杰克逊XML解析

来自分类Dev

消除对杰克逊的依赖

来自分类Dev

处理杰克逊异常

来自分类Dev

杰克逊api的实现

来自分类Dev

杰克逊数据绑定

来自分类Dev

假设字段没有条件为空,如何告诉杰克逊忽略一个字段?

来自分类Dev

杰克逊·杰森·马珀:没有字段还是空白字段?

来自分类Dev

杰克逊使用其他字段的哈希值添加自定义字段