首页 > 解决方案 > Micronaut 约束验证

问题描述

在 grails 中,编写自定义验证和跨字段验证很简单。

这如何在 micronaut 框架内完成?

给定一个包含复杂对象列表的简单 POJO;

a) 如何编写验证器以确保列表中的唯一性?

b) 当字段之间存在某种关系时,如何编写验证器?

当使用实现 io.micronaut.validation.validator.constraints.ConstraintValidator 的类时 - 似乎只能访问带注释的字段本身的值。

package pkg;

import io.micronaut.core.annotation.Introspected;

import javax.validation.Valid;
import java.util.List;

@Introspected
public class PoJo {

    // how to write a validation to check for uniqueness in the list, e.g. only one on each type exists in the list
    @Valid
    List<ComplexObject> complexObjectList;

    public PoJo(List<ComplexObject> complexObjectList) {
        this.complexObjectList = complexObjectList;
    }

    public List<ComplexObject> getComplexObjectList() {
        return complexObjectList;
    }
}


package pkg;

import io.micronaut.core.annotation.Introspected;

@Introspected
public class ComplexObject {

    // how to cross validate fields
    // e.g. type=A num must be > 0 and < 10
    //      type=B num must be > 10 and < 20
    String type;
    int num;

    public ComplexObject(String type, int num) {
        this.type = type;
        this.num = num;
    }

    public String getType() {
        return type;
    }

    public int getNum() {
        return num;
    }
}``` 

标签: micronaut

解决方案


a) 如何编写验证器以确保列表中的唯一性?

有很多方法可以做到这一点。一种选择是创建一个集合并将大小与原始大小进行比较。

b) 当字段之间存在某种关系时,如何编写验证器?

将验证器应用于包含两个字段的对象


推荐阅读