Hibernate検証アノテーションでアノテーションが付けられたエンティティを持つモデルオブジェクトがあります。たとえば、@ NotBlank、@ NotNull、@Length。モデルオブジェクトのインスタンスを装飾するこのモデルをサポートするフォームがあります。このインスタンスに@NotNull、@Validアノテーションを付けました。このバッキングフォームのバリデーターをコントローラークラスに登録しています。@RequestMappingメソッドの引数に@Validアノテーションが付けられている場合、フォームバリデーターが呼び出されます。
モデルにも@Entityアノテーションが付けられていることに注意してください。モデルのバッキングフォームは、モデルの薄いラッパーにすぎません。
しかし、装飾されたオブジェクトの検証はチェックされていませんか?リクエストマッピングメソッドの定義でBindResultにエラーがないかチェックしますが、エラーがないため、これを知っています。私のフォームフィールドはすべて空なので、@NotBlankで注釈が付けられた装飾モデルのフィールドの検証をチェックする必要があります。しかし、それは起こりません。
これを修正するのを手伝ってもらえますか?
編集:サンプルコード
@Entity
class MyModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable=false)
private Long id;
@NotBlank
@Column(unique=true, length=30, nullable=false)
private String number;
@Column(length=30, nullable=false)
@Length(min=1, max=30)
private String firstName;
/* ... getters and setters ... */
}
public class MyModelBackingForm {
@NotNull
@Valid
private MyModel model;
/* ... delegate getters and setters for all fields in MyModel ... */
}
編集:コントローラーコードを追加
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new MyBackingFormValidator());
}
編集:
public class MyBackingFormValidator implements Validator {
public MyBackingFormValidator() {
super();
}
@Override
public boolean supports(Class<?> clazz) {
return Arrays.asList(MyBackingForm.class, MyModel.class).contains(clazz);
}
@Override
public void validate(Object obj, Errors errors) {
// custom validation code commented ... as I want to check if JSR 303 validations invoked
}
}