@InitBinder

@Controller クラスまたは @ControllerAdvice クラスには、WebDataBinder インスタンスを初期化するための @InitBinder メソッドを含めることができ、これにより次のことが可能になります。

  • リクエストパラメーターをモデルオブジェクトにバインドします。

  • リクエスト値を文字列からオブジェクトのプロパティ型に変換します。

  • HTML フォームをレンダリングするときに、モデルオブジェクトのプロパティを文字列としてフォーマットします。

@Controller では、DataBinder カスタマイズはコントローラー内でローカルに適用されるか、アノテーションを通じて名前で参照される特定のモデル属性にも適用されます。@ControllerAdvice では、カスタマイズはコントローラーのすべてまたはサブセットに適用できます。

PropertyEditorConverterFormatter コンポーネントを DataBinder に登録して型変換を行うことができます。あるいは、MVC 設定を使用して、グローバルに共有される FormattingConversionService に Converter および Formatter コンポーネントを登録することもできます。

@InitBinder メソッドは、@ModelAttribute を除いて、@RequestMapping メソッドと同じ引数の多くを持つことができます。通常、このようなメソッドには WebDataBinder 引数 (登録用) と void 戻り値があります。例:

  • Java

  • Kotlin

@Controller
public class FormController {

	@InitBinder (1)
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
	}

	// ...
}
1@InitBinder メソッドの定義。
@Controller
class FormController {

	@InitBinder (1)
	fun initBinder(binder: WebDataBinder) {
		val dateFormat = SimpleDateFormat("yyyy-MM-dd")
		dateFormat.isLenient = false
		binder.registerCustomEditor(Date::class.java, CustomDateEditor(dateFormat, false))
	}

	// ...
}
1@InitBinder メソッドの定義。

あるいは、共有 FormattingConversionService を介して Formatter ベースのセットアップを使用する場合、次の例に示すように、同じアプローチを再利用して、コントローラー固有の Formatter 実装を登録できます。

  • Java

  • Kotlin

@Controller
public class FormController {

	@InitBinder (1)
	protected void initBinder(WebDataBinder binder) {
		binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
	}

	// ...
}
1 カスタムフォーマッタで @InitBinder メソッドを定義します。
@Controller
class FormController {

	@InitBinder (1)
	protected fun initBinder(binder: WebDataBinder) {
		binder.addCustomFormatter(DateFormatter("yyyy-MM-dd"))
	}

	// ...
}
1 カスタムフォーマッタで @InitBinder メソッドを定義します。
モデル設計に関する詳細なガイダンスについては、データバインドを参照してください。