簡體   English   中英

Java bean驗證

[英]Java bean validation

我知道之前曾有人問過這個問題,但是不幸的是我無法獲得答案( 如何在類級別約束之前驗證字段級別約束? )。

我有以下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和字段)嗎?

我找到了答案:

@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來自驗證jar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM