Springでネストしたオブジェクトの入力チェックを行う

ちょっと複雑な構造のフォームで入力チェックを行う方法について。

環境

  • Spring Boot: 2.3.3

解決方法

独自クラスのリスト等、ネストしたオブジェクトを持つクラスをフォームに使用する際、通常は親オブジェクトにあるフィールドしか入力チェックの対象になりません。

子オブジェクトにも入力チェックを行いたい場合は、親オブジェクトの対象のフィールドに@Validをつけます。

記述例

@Data
 public class ContentForm {
 
 	/** 記事リスト */
 	@Valid
 	private List<Article> articleList;
 	
 	/** 雑誌ID */
 	private int magazineId;
 	
 	// 省略
 } 

この例はArticleクラス内にある各フィールドに対して入力チェックを行うようにしています。
@Validなしでは何のチェックもされずに素通りしてしまいますが、ネストしたフィールドに@Validを付けることによりリスト内の各フィールドに対して1つずつ入力チェックが実施されます。

参考

  • Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
    • 5.7.5 ネストしたJavaBeansの入力チェック
    • 225ページ