セッション属性があり、myForm には DB からロードされたいくつかの Hibernate オブジェクトが含まれています
@SessionAttributes("myForm")
コントローラーからフォームを受け取り、次のように処理します
@RequestMapping(value = "/mymapping", method = RequestMethod.POST)
@ResponseBody
public final JsonValidationResponse validateContact(
@ModelAttribute(value = "myForm") final MyForm myForm) {
return jsonValidator.getJsonErrors(myForm.getContact());
}
Contact クラスには、次の検証アノテーションがあります。
@Email
private String email;
次の方法に問題があります
public final <T> JsonValidationResponse getJsonErrors(
final T objectToValidate) {
//TEST CODE HERE
DataBinder binder = new DataBinder(objectToValidate);
binder.setValidator(validator);
binder.validate();
return getJsonErrors(binder.getBindingResult());
}
objectToValidate を観察すると、次のように表示されます。これは、休止状態のオブジェクトであり、LAZY 初期化を使用しているためだと思います。
com.mypackage.Contact_$$_javassist_27@1bdbbc0[contactId=0,name=,email=,phone1=,phone2=,phone3=,version=0,createDate=,modifiedDate=,userId=]
//TEST CODE HERE
以下のように objectToValidate でゲッターを実行すると、渡された正しい値 (「ダミー」など) が取得されます。より長いレイジー初期化。
String email = (Contact)objectToValidate.getEmail();
でダミー オブジェクトを作成する//TEST CODE HERE
と、コードは正常に動作し、バインダーはエラーを検出します。
Contact dummy = new Contact();
dummy.setEmail("dummy");
基本的には、binder.getBindingResult() は hibernate オブジェクトを使用する場合には機能せず、修正方法がわかりません。LAZY 初期化された休止状態のオブジェクト プロパティを解決できないようです (オブジェクトのメソッドを呼び出して正しい結果を得た後でも)。