カテゴリ: Spring 更新日: 2025/09/26

Spring MVCのConverterとFormatter入門!型変換の仕組みと拡張ポイントをわかりやすく解説

Spring MVCのConverter/Formatter入門:型変換の拡張ポイント
Spring MVCのConverter/Formatter入門:型変換の拡張ポイント

先生と生徒の会話形式で理解しよう

生徒

「Spring MVCって、リクエストパラメータを自動で変換してくれるって聞いたんですが、どういう仕組みなんですか?」

先生

「Springでは、ConverterFormatterという仕組みを使って、文字列をJavaオブジェクトに変換したり、逆に整形してくれるんです。」

生徒

「なるほど!でも、それって自分でカスタマイズもできるんですか?」

先生

「はい、自分で独自のConverterやFormatterを実装すれば、自由に型変換のルールを追加できますよ。詳しく見ていきましょう。」

1. Spring MVCにおける型変換の仕組み

「1. Spring MVCにおける型変換の仕組み」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. Spring MVCにおける型変換の仕組み
1. Spring MVCにおける型変換の仕組み

Spring MVCでは、HTTPリクエストのパラメータは基本的に文字列として受け取られます。しかし、実際にコントローラで扱いたいのは日付や数値、独自クラスなどのオブジェクト型です。そこで登場するのが型変換(Type Conversion)の仕組みです。

Springではこの型変換の処理をConverterFormatterといったインターフェースを使って内部的に行っており、開発者はこれらを使ってカスタマイズすることができます。

2. Converterとは?基本の型変換インターフェース

2. Converterとは?基本の型変換インターフェース
2. Converterとは?基本の型変換インターフェース

org.springframework.core.convert.converter.Converterは、1つの型から別の型に変換するためのシンプルなインターフェースです。たとえば、StringからLocalDateに変換したい場合に使えます。


public class StringToLocalDateConverter implements Converter<String, LocalDate> {
    @Override
    public LocalDate convert(String source) {
        return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}

このようなクラスを作成し、Springに登録することで、フォームの入力文字列をLocalDateに変換して扱えるようになります。

3. Formatterとは?表示と解析の両方を扱う仕組み

3. Formatterとは?表示と解析の両方を扱う仕組み
3. Formatterとは?表示と解析の両方を扱う仕組み

SpringにはFormatterというインターフェースもあります。これは型変換だけでなく、文字列へのフォーマット(整形)も行うことができます。


public class LocalDateFormatter implements Formatter<LocalDate> {
    @Override
    public LocalDate parse(String text, Locale locale) {
        return LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy/MM/dd"));
    }

    @Override
    public String print(LocalDate object, Locale locale) {
        return object.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
    }
}

Formatterparseprintの2つのメソッドを実装することで、双方向の変換が可能になります。特に画面に表示する際に整形が必要な場合に便利です。

4. 独自Converterの登録方法

「4. 独自Converterの登録方法」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. 独自Converterの登録方法
4. 独自Converterの登録方法

作成したConverterは、WebMvcConfigureraddFormattersメソッドを使って登録します。


@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToLocalDateConverter());
    }
}

このように設定することで、Spring MVCは自動的にリクエストパラメータを指定した型に変換してくれるようになります。

5. 独自Formatterの登録と活用方法

5. 独自Formatterの登録と活用方法
5. 独自Formatterの登録と活用方法

FormatteraddFormattersメソッドで登録できます。たとえば、日付を「2025/09/04」のようなフォーマットで表示・入力させたい場合は次のようにします。


@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(new LocalDateFormatter());
    }
}

このようにFormatterを使うことで、入力チェックと出力整形の両方をスマートに実装できます。

6. ConverterとFormatterの違いを整理しよう

6. ConverterとFormatterの違いを整理しよう
6. ConverterとFormatterの違いを整理しよう

Converterは「変換のみ(片方向)」、Formatterは「変換+表示(双方向)」です。

  • Converter:数値やIDなどの変換処理に最適
  • Formatter:日付や金額など、表示形式が重要な項目に最適

どちらを使うかは、アプリケーションの要件によって選びましょう。

7. よく使われるユースケースと具体例

「7. よく使われるユースケースと具体例」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. よく使われるユースケースと具体例
7. よく使われるユースケースと具体例

実務でよく使われるユースケースをいくつか紹介します。

  • ユーザーのID文字列をUserオブジェクトに変換(Converter)
  • 画面で日付を「yyyy年MM月dd日」形式に表示(Formatter)
  • 金額を「#,###円」で表示しつつ、数値として処理(Formatter)

こうした型変換をうまく使うことで、入力と出力の処理をすっきり整理できます。

8. Spring Bootでも同じように使える?

8. Spring Bootでも同じように使える?
8. Spring Bootでも同じように使える?

Spring BootでもWebMvcConfigurerを使えば同じようにConverterやFormatterを登録できます。Bootの自動設定に頼るだけでなく、必要に応じて明示的に設定を追加することで、より細かい制御が可能になります。

たとえば、複数の日付フォーマットに対応したり、エラー時のログを出力するようにすることで、実務でのトラブルも未然に防げます。

9. フォームバインドと型変換の関係

9. フォームバインドと型変換の関係
9. フォームバインドと型変換の関係

Spring MVCの@ModelAttributeBindingResultといったフォームバインドの仕組みと、ConverterやFormatterは密接に連携しています。

たとえば、ユーザーが入力した文字列が@ModelAttributeでバインドされる時に、自動で型変換が行われています。つまり、型変換はフォーム処理を支える重要な仕組みなのです。

カテゴリの一覧へ
新着記事
New1
Spring
Spring Securityの新標準!SecurityFilterChainとHttpSecurity DSLの書き方を初心者向けに解説
更新記事
New2
Java
Javaの抽象クラス(abstract)を完全ガイド!継承と設計のルールを学ぶ
更新記事
New3
Servlet
JavaのGenericServletクラスのgetInitParameterNamesメソッドを徹底解説!初心者でもわかる初期化パラメータの取得方法
更新記事
New4
JSP
JSPとは何か?初心者向けにできること・仕組み・特徴をやさしく解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.6
Java&Spring記事人気No6
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.7
Java&Spring記事人気No7
Spring
Spring BootとVS Codeで開発を始めよう!拡張機能・launch.json・ホットリロードを丁寧に解説
No.8
Java&Spring記事人気No8
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門