DataBinder
@Controller クラスまたは @ControllerAdvice クラスには、WebDataBinder インスタンスを初期化するための @InitBinder メソッドを含めることができ、これにより次のことが可能になります。
リクエストパラメーターをモデルオブジェクトにバインドします。
リクエスト値を文字列からオブジェクトのプロパティ型に変換します。
HTML フォームをレンダリングするときに、モデルオブジェクトのプロパティを文字列としてフォーマットします。
@Controller では、DataBinder カスタマイズはコントローラー内でローカルに適用されるか、アノテーションを通じて名前で参照される特定のモデル属性にも適用されます。@ControllerAdvice では、カスタマイズはコントローラーのすべてまたはサブセットに適用できます。
PropertyEditor、Converter、Formatter コンポーネントを DataBinder に登録して型変換を行うことができます。あるいは、WebFlux 設定を使用して、グローバルに共有される FormattingConversionService に Converter および Formatter コンポーネントを登録することもできます。
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
protected void initBinder(WebDataBinder binder) {
binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); (1)
}
// ...
}| 1 | カスタムフォーマッタ(この場合は DateFormatter)を追加します。 |
@Controller
class FormController {
@InitBinder
fun initBinder(binder: WebDataBinder) {
binder.addCustomFormatter(DateFormatter("yyyy-MM-dd")) (1)
}
// ...
}| 1 | カスタムフォーマッタ(この場合は DateFormatter)を追加します。 |
| モデル設計に関する詳細なガイダンスについては、データバインドを参照してください。 |