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と同じように再帰的に機能しないのはなぜだろうと思っています。