8

JSR-303 バリデータ アノテーションを使用してモデル オブジェクトを作成します。

public class UserInfoBasicModel  implements Serializable{
    @NotNull(message="cannot be null")
    @NotEmpty(message="cannot be empty")
    private String name;
    //getter and setter
    //..ignored..
}

コントローラーでの自動データバインディング:

@Controller
@RequestMapping("/user")
public class UserController  {
    @RequestMapping(method = RequestMethod.POST, value = "/registry/")
    public String registry(HttpServletRequest request,
            ModelMap modelMap,
            @Valid UserInfoBasicModel userInfoBasicModel,
            BindingResult result)    {
        //...some code here...
    }
}

上記のシナリオでは、検証には問題なく機能します。しかし、以下のようにモデルを別のオブジェクトにカプセル化すると、UserInfoBasicModel の検証が機能しなくなります。

UserInfoBasicModel オブジェクトをカプセル化するオブジェクト:

public static class UserUpdateFormTransmitter       {
    @Valid
    private UserInfoBasicModel userInfoBasicModel;
    //getter and setter
    //..ignored..
}

コントローラー:

@Controller
@RequestMapping("/user")
public class UserController  {
    @RequestMapping(method = RequestMethod.POST, value = "/registry/")
    public String registry(HttpServletRequest request,
            ModelMap modelMap,
            @Valid UserUpdateFormTransmitter userUpdateFormTransmitter,
            BindingResult result)    {
        //...some code here...
    }
}

@valid アノテーションがJSR 303: Bean Validationと同じように再帰的に機能しないのはなぜだろうと思っています。

4

2 に答える 2

6

私は再帰的な検証を行ったことがありませんが、これによればサブオブジェクトに@Validのタグを付けるだけで可能です。

于 2013-02-18T16:52:57.100 に答える