0

エラーメッセージを指定するクラスの検証を書いています。1 つのメンバーは、検証もある別のクラスのオブジェクトの List<> です。oval によって返される違反リストに必要な情報が含まれるように、そのリストの各オブジェクトを検証したいと思います。

例:

class A{
    @AssertValid
    List<B> items;
}

class B{
    @NotNull(message="ID can't be null")
    Integer id;
}

さて、私のメインにこれ​​があると仮定しましょう:

A obj = new A();
List<B> items = new ArrayList<>();
items.add(new B());
a.setItems(items);
List<ConstraintViolation> violations = validator.validate(obj);
if(violations.size()>0) {
    System.out.println(violations.get(0).getMessage());
}

表示されるのは " enet.sf.oval.constraint.AssertValid: com.A is invalid" ではなく " ID Can't be null" です。

リスト全体ではなく、各項目を検証するために OVal に指定するオプションはありますか?

ありがとう

4

2 に答える 2

0

独自の MessageFormatter を使用してそれを行うことができます。

public class CustomMessageValueFormatter implements MessageValueFormatter {
    public static final CustomMessageValueFormatter INSTANCE = new CustomMessageValueFormatter();

    @Override
    public String format(Object value) {
        Validator validator = new Validator();
        List<ConstraintViolation> constraintViolations = validator.validate(value);
        List<String> errorMessages = new ArrayList<>();
        constraintViolations.forEach(v -> errorMessages.add(v.getMessage()));
        return errorMessages.isEmpty() ? value.toString() : errorMessages.toString();
    }
}

class A{
    @AssertValid(message = "{invalidValue}")
    List<B> items;
}

class B{
    @NotNull(message="ID can't be null")
    Integer id;
}

検証する前に、カスタム MessageFormatter を次のように設定します。

Validator.setMessageValueFormatter(CustomMessageValueFormatter.INSTANCE);
于 2016-03-07T10:39:40.893 に答える