一千萬個為什麽

搜索

在Hibernate Validator中為每個屬性生成錯誤代碼

我正在考慮使用Hibernate Validator來滿足我的要求。我想驗證一個JavaBean,其中屬性可能有多個驗證檢查。例如:

class MyValidationBean
{
   @NotNull
   @Length( min = 5, max = 10 )
   private String myProperty;
}

但是如果此屬性驗證失敗,我想要一個特定的錯誤代碼與ConstraintViolation相關聯,無論它是否由於@Required或@Length而失敗,盡管我想保留錯誤消息。

class MyValidationBean
{
   @NotNull
   @Length( min = 5, max = 10 )
   @ErrorCode( "1234" )
   private String myProperty;
}

像上面這樣的東西會很好,但它不一定要像那樣結構。我無法通過Hibernate Validator看到這樣做的方法。可能嗎?

最佳答案

您可以創建自定義註釋以獲取您要查找的行為,然後在驗證和使用refelection時,您可以提取註釋的值。類似於以下內容:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ErrorCode {
    String value();
}

在你的bean中:

@NotNull
@Length( min = 5, max = 10 )
@ErrorCode("1234")
public String myProperty;

在驗證你的bean時:

Set> constraintViolations = validator.validate(myValidationBean);    
for (ConstraintViolationcv: constraintViolations) {
    ErrorCode errorCode = cv.getRootBeanClass().getField(cv.getPropertyPath().toString()).getAnnotation(ErrorCode.class);
    System.out.println("ErrorCode:" + errorCode.value());
}

話雖如此,我可能會質疑是否需要為這些類型的消息提供錯誤代碼。

轉載註明原文: 在Hibernate Validator中為每個屬性生成錯誤代碼