Проверка Java-бина - PullRequest
       5

Проверка Java-бина

0 голосов
/ 12 сентября 2018

Я знаю, что этот вопрос задавался ранее, но, к сожалению, я не могу получить ответы на работу ( Как проверить ограничение на уровне поля перед ограничением на уровне класса? ).

У меня есть следующее Pojo:

@ValidBalanceData(allowableBalanceDifference = 0.01)
public class Mutation {

    @NotNull() private BigDecimal balanceBefore;

    @NotNull() private BigDecimal balanceAfter;

    @NotNull() private BigDecimal amount;

    ....
}

Я реализовал аннотацию ValidBalanceData:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = BalanceDataConstraintChecker.class)
public @interface ValidBalanceData {
    String message() default "{nl.smith.balanceData.message}";

    double allowableBalanceDifference();

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

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

Я также реализовал класс validatedBy. К сожалению, ограничение ValidBalanceData проверяется перед ограничениями NotNull. Поскольку ограничение ValidBalanceData предполагает, что значения balanceBefore, balanceAfter и amount не равны NULL, это приводит к исключению Nullpointer. Как мне решить эту проблему? Может кто-нибудь дать мне рабочий пример (используя @GroupSequence и поля)?

1 Ответ

0 голосов
/ 12 сентября 2018

Я нашел ответ:

@GroupSequence({ FieldChecks.class, Mutation.class })
@ValidBalanceData(allowableBalanceDifference = 0.01, groups =  Default.class)
public class Mutation {

private Integer id;

@NotNull(groups = FieldChecks.class)
private BigDecimal balanceBefore;

@NotNull(groups = FieldChecks.class)
private BigDecimal balanceAfter;

@NotNull(groups = FieldChecks.class)
private BigDecimal amount;

....

}

FieldChecks - это пользовательский интерфейс с пустым маркером, а javax.validation.groups.Default происходит из файла проверки.

...