1
我有一個對象Foo
,其保持參考對象Bar
具有參照對象Baz
,並且爲了Foo
是有效的,Bar
必須有一個有效的,非空引用到Baz
。如何在Spring MVC中驗證我的域對象上的對象的字段?
的問題是,Bar
不需要一個有效的,非空Baz
是有效的,所以我不能簡單地把驗證在那裏,我需要它是內Foo
。
這裏的階級結構的一個簡單的僞版本我說的是:
class Foo {
// Bar needs to have a valid Baz. Something like this would be ideal:
// @HasAValidBaz(message="Baz is required")
Bar bar;
}
class Bar {
// Baz can be null and Bar will still be valid
// But if there _is_ a Baz, it needs to be valid
Baz baz;
}
class Baz {
@NotBlank(message="My String is required")
String myString;
}
我知道我可以用類級別的定製驗證註解做到這一點,但問題是,這些錯誤的對象和相應的消息適用於類實例,而不是字段實例,我需要能夠在正確的表單字段旁邊輕鬆顯示錯誤消息。
有沒有一個很好的方法來做到這一點,或者我堅持在控制器中實現這種驗證?
如果我走這條路,我還可以在'Foo'等領域與「正常」的驗證註釋,比如'@NotNull','@NotBlank'等等。或者'FooValidator'會覆蓋所有這些? (很顯然,我對事物進行了大量的簡化,所以如果讓我看看剩下的驗證過程會更有幫助,請告訴我。例如,我已經有2個其他自定義驗證器可以通過Foo類的註釋來處理與多字段驗證問題) – cdeszaq 2012-04-05 19:57:30
我發現了另一個問題,它可以很好地回答這個問題:http://stackoverflow.com/questions/8819676/springmvc-jsr303-validator-co-exist-with-spring-webdatabinder-validator-in - 酮一。基本上,您讓控制器使用註釋自動驗證。然後,在控制器方法內調用您的自定義驗證器,傳遞您之前驗證的綁定結果。 – 2012-04-05 22:34:33