カテゴリ: 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における型変換の仕組み

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の登録方法

作成した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. よく使われるユースケースと具体例

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

  • ユーザーの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でバインドされる時に、自動で型変換が行われています。つまり、型変換はフォーム処理を支える重要な仕組みなのです。

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.5
Java&Spring記事人気No5
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.6
Java&Spring記事人気No6
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説