Подтверждение ограничения Micronaut - PullRequest
0 голосов
/ 18 февраля 2020

В граалях это просто написать пользовательскую проверку и валидацию между полями.

Как это можно сделать в рамках микронавигации?

Учитывая простой POJO, который содержит список сложных объектов;

a) Как можно написать валидатор, чтобы обеспечить уникальность в списке?

б) Как можно написать валидатор, если между полями есть некоторая связь?

При использовании класса, который реализует 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;
    }
}``` 

1 Ответ

0 голосов
/ 27 февраля 2020

a) Как можно написать валидатор для обеспечения уникальности в списке?

Существует много способов сделать это. Одним из вариантов является создание набора и сравнение размера с оригиналом.

б) Как можно написать валидатор, если между полями есть некоторая связь?

Применить валидатор для объекта, который содержит оба поля

...