2
如何在類級驗證程序中返回不同的消息?Java bean驗證 - 覆蓋默認消息
接口
public @interface ValidFoo
{
public String message() default "{package.ValidFoo.message}";
}
實施
@Override
public boolean isValid(final Foo foo, final ConstraintValidatorContext context)
{
// check constraint 1
// --> return message "package.ValidFoo.message_constraint1"
// check constraint 2
// --> return message "package.ValidFoo.message_constraint2"
}
ValidationMessages.properties
package.ValidFoo.message=Validation error.
package.ValidFoo.message_constraint1=Validation error 1.
package.ValidFoo.message_constraint2=Validation error 2.
你也知道,如果有可能添加郵件屬性在運行時格式化('「{0}」')?似乎只能使用接口定義中的硬編碼屬性,而不能更新這些屬性。 – djmj
在Bean Validation 1.0中,只允許使用靜態變量。 Hibernate Validator也允許插入驗證值本身。這也使得它也進入了Bean Validation 1.1規範更新。這不允許添加任何動態變量。我們可能很快會在Hibernate Validator中實現這樣的功能 - https://hibernate.atlassian.net/browse/HV-701。隨時留下對這個問題的評論來描述你的用例。 – Hardy
在許多類級約束中,此功能很有幫助,因爲驗證可以依賴於動態屬性。另一個用例是簡單的憑證檢查。例如,狀態{0}中的Order不能由類型爲{1}的客戶端更新。「在這種情況下,類型也必須以某種方式傳遞給驗證器實例,除非它是Order本身的屬性,這看起來是一種糟糕的解決方法。所以我必須手動驗證此案例才能創建正確的消息或使用通用消息。 '在當前狀態下更新訂單的憑證無效.'。 – djmj