Spring Bootの@RequestBodyと@ResponseBodyを完全解説!初心者でもわかるJSON入出力とJackson設定
生徒
「Spring BootでJSONのリクエストやレスポンスを扱うときって、どうすればいいんですか?」
先生
「Spring Bootでは、@RequestBodyと@ResponseBodyを使うことで、JSON形式のデータを簡単に扱うことができますよ。」
生徒
「それってJacksonっていうライブラリも関係してるんですか?」
先生
「はい。Jacksonというライブラリが内部で自動的に動いて、JSONとJavaオブジェクトの変換をしてくれています。それでは、具体的に見ていきましょう。」
1. @RequestBodyと@ResponseBodyとは?
Spring BootでJSONデータを扱うには、@RequestBodyと@ResponseBodyというアノテーションを使用します。@RequestBodyはクライアントから送られてきたJSONをJavaオブジェクトに変換し、@ResponseBodyはJavaオブジェクトをJSON形式にしてレスポンスとして返す役割を持っています。
この2つを使えば、JSONの送受信をとてもシンプルに記述できます。
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データのやり取りをするためのサンプル
クライアントが以下のような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による自動変換の仕組み
Spring Bootでは、Jacksonというライブラリが標準で組み込まれており、JSONとJavaの相互変換(シリアライズ/デシリアライズ)を自動で行います。
Jacksonがなければ、JSONの解析や生成を自分で行う必要がありますが、Spring Bootではこの作業が不要になります。非常に便利です。
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. 日付のフォーマット指定も簡単にできる
日付のフォーマットを変更したい場合も、Jacksonの設定で対応可能です。
@Bean
public Jackson2ObjectMapperBuilderCustomizer dateFormatCustomizer() {
return builder -> builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
この設定を追加することで、JavaのDate型などが指定したフォーマットでJSONに変換されます。
7. HTTPレスポンスの確認例
上記の設定を反映させた状態でAPIを実行すると、以下のようなJSONレスポンスが返ってきます。
{
"user_name":"佐藤一郎",
"email":"sato@example.com",
"created_at":"2025-09-04 12:34:56"
}
8. JSONのキー名を日本語にしたい場合
Jacksonでは、フィールドに@JsonPropertyを付けることで、任意のキー名に変更することができます。
public class Product {
@JsonProperty("商品名")
private String name;
@JsonProperty("価格")
private int price;
// getter, setter
}
このようにすることで、日本語のキーでJSONを出力することも可能ですが、一般的には英語が推奨されます。