4

次のネストされたオブジェクトがあります。コントローラでの検証に@Validを使用しています。ここで、BindingResultオブジェクトはChildオブジェクトのnameフィールドを検証していません。私は何かが足りないのですか?

class Parent{
         @Valid  
         private Child child;
         //getter and setter for child object
 }

 class Child{
     @NotNull(messag="Name cannot be null")
     private String name;
     //getter and setter for name
 }

My controller validate method

@RequestMapping(value = "/validate", method = RequestMethod.POST)
public @ResponseBody  String validate(@Valid @ModelAttribute("parent") Parent parent, BindingResult bindingResult) {
    //Here I can see child name value if I say parent.getChild().getName()

  // But if  parent.getChild().getName() is null, bindingResult.hasErrors() is returning false

}
4

3 に答える 3

2

私の知る限り@NotNull、Spring モデルは「オブジェクトを受信して​​いません」を代わりに「空白の文字列」にマッピングすることが多いため、文字列の検証にはあまり適していません。

@NotBlankBindingResults がエラーを返すかどうか試してみてください。

于 2012-06-13T07:38:52.343 に答える
0

このようにすることはできません。そのようなネストされたオブジェクトを検証することはできません。

バリデーターを使用する必要があります。

于 2012-06-13T12:55:52.227 に答える
-1

私も以前に同様の問題に直面していました。

そして、2〜3日の研究開発を行った後、ネストされたオブジェクトの検証に成功しました. ネストされたオブジェクトに対してカスタム検証を実行しようとしました。

カスタムバリデータークラスを作成し、コントローラーとメソッド呼び出し validator.validate(parent, bindingResult) でそれを自動配線する必要があります。これにより、 bindingResult オブジェクトのネストされたオブジェクトフィールドにバインドされたエラーが返され、次に表示できますいつものjspページ。

これがお役に立てば幸いです。乾杯。

于 2012-06-13T02:45:03.863 に答える