カテゴリ: Spring 更新日: 2025/10/06

Spring Bootの@RequestBodyと@ResponseBodyを完全解説!初心者でもわかるJSON入出力とJackson設定

Spring Bootの@RequestBody/@ResponseBody:JSON入出力とJackson設定
Spring Bootの@RequestBody/@ResponseBody:JSON入出力とJackson設定

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

生徒

「Spring BootでJSONのリクエストやレスポンスを扱うときって、どうすればいいんですか?」

先生

「Spring Bootでは、@RequestBody@ResponseBodyを使うことで、JSON形式のデータを簡単に扱うことができますよ。」

生徒

「それってJacksonっていうライブラリも関係してるんですか?」

先生

「はい。Jacksonというライブラリが内部で自動的に動いて、JSONとJavaオブジェクトの変換をしてくれています。それでは、具体的に見ていきましょう。」

1. @RequestBodyと@ResponseBodyとは?

1. @RequestBodyと@ResponseBodyとは?
1. @RequestBodyと@ResponseBodyとは?

Spring BootでJSONデータを扱うには、@RequestBody@ResponseBodyというアノテーションを使用します。@RequestBodyはクライアントから送られてきたJSONをJavaオブジェクトに変換し、@ResponseBodyはJavaオブジェクトをJSON形式にしてレスポンスとして返す役割を持っています。

この2つを使えば、JSONの送受信をとてもシンプルに記述できます。

2. @RestControllerを使えば@ResponseBodyは省略できる

2. @RestControllerを使えば@ResponseBodyは省略できる
2. @RestControllerを使えば@ResponseBodyは省略できる

@RestControllerをクラスにつけると、全てのメソッドに@ResponseBodyが暗黙的に適用されます。そのため、明示的に@ResponseBodyを書かなくても、自動的にJSONレスポンスが返される仕組みになっています。


@RestController
@RequestMapping("/api")
public class UserController {

    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        return user;
    }
}

3. JSONデータのやり取りをするためのサンプル

3. JSONデータのやり取りをするためのサンプル
3. JSONデータのやり取りをするためのサンプル

クライアントが以下のようなJSONデータをPOSTしたとします。


{
    "name": "田中太郎",
    "email": "tanaka@example.com"
}

このリクエストをSpring Bootで受け取るには、以下のようにJavaクラスを作ります。


public class User {
    private String name;
    private String email;

    // getterとsetterは省略可能(Lombok使用可)
}

そして、コントローラー側で@RequestBodyを使って受け取ります。


@PostMapping("/user")
public User receiveUser(@RequestBody User user) {
    return user;
}

このように記述することで、クライアントから送られてきたJSONデータがJavaオブジェクトに変換され、そのままレスポンスとして返されます。

4. Jacksonによる自動変換の仕組み

4. Jacksonによる自動変換の仕組み
4. Jacksonによる自動変換の仕組み

Spring Bootでは、Jacksonというライブラリが標準で組み込まれており、JSONとJavaの相互変換(シリアライズ/デシリアライズ)を自動で行います。

Jacksonがなければ、JSONの解析や生成を自分で行う必要がありますが、Spring Bootではこの作業が不要になります。非常に便利です。

5. Jacksonのカスタム設定(フィールド名や日付フォーマットなど)

5. Jacksonのカスタム設定(フィールド名や日付フォーマットなど)
5. Jacksonのカスタム設定(フィールド名や日付フォーマットなど)

Jacksonは非常に柔軟で、フィールド名を変換したり、日付のフォーマットを指定したりすることも可能です。

例えば、Javaのフィールド名をスネークケース(user_name)に変換するには以下のように設定します。


@Configuration
public class JacksonConfig {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer() {
        return builder -> builder.propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
    }
}

これにより、JavaのuserNameというフィールドが、JSONではuser_nameとして出力されます。

6. 日付のフォーマット指定も簡単にできる

6. 日付のフォーマット指定も簡単にできる
6. 日付のフォーマット指定も簡単にできる

日付のフォーマットを変更したい場合も、Jacksonの設定で対応可能です。


@Bean
public Jackson2ObjectMapperBuilderCustomizer dateFormatCustomizer() {
    return builder -> builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
}

この設定を追加することで、JavaのDate型などが指定したフォーマットでJSONに変換されます。

7. HTTPレスポンスの確認例

7. HTTPレスポンスの確認例
7. HTTPレスポンスの確認例

上記の設定を反映させた状態でAPIを実行すると、以下のようなJSONレスポンスが返ってきます。


{
"user_name":"佐藤一郎",
"email":"sato@example.com",
"created_at":"2025-09-04 12:34:56"
}

8. JSONのキー名を日本語にしたい場合

8. JSONのキー名を日本語にしたい場合
8. JSONのキー名を日本語にしたい場合

Jacksonでは、フィールドに@JsonPropertyを付けることで、任意のキー名に変更することができます。


public class Product {

    @JsonProperty("商品名")
    private String name;

    @JsonProperty("価格")
    private int price;

    // getter, setter
}

このようにすることで、日本語のキーでJSONを出力することも可能ですが、一般的には英語が推奨されます。

カテゴリの一覧へ
新着記事
Javaのラムダ式で戻り値とvoidの使い方を解説!returnの書き方も完全理解
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
Javaのラムダ式の書き方を徹底解説!アロー演算子->の基本と使い方
Thymeleafのth:eachの使い方!ループ回数やindexなどの繰り返し処理を学ぼう
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring Boot JPA入門:エンティティ/リポジトリの基本と作り方
No.3
Java&Spring記事人気No3
Javaの@Validアノテーションを徹底解説!初心者でもわかる入力値検証の基本
No.4
Java&Spring記事人気No4
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス