フラットな JSON を基本の Java POJO に変換する
private フィールドと getter / setter を備えた Plain Old Java Object を JSON から生成します。String、Integer、Long、Double、Boolean の型マッピングを学べます。
Foundations
詳細な説明
フラット JSON から Java POJO へ
最もシンプルな JSON-to-Java 変換は、ネストや配列を持たないフラットなオブジェクトを取り、各キーに対応する private フィールドとそのアクセサを 1 組ずつ持つクラスを生成することです。
JSON の例
{
"id": 42,
"name": "Alice",
"email": "alice@example.com",
"active": true,
"score": 98.5
}
生成される Java POJO
package com.example.model;
public class User {
private Integer id;
private String name;
private String email;
private Boolean active;
private Double score;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// 残りのフィールドも同様
}
型マッピング
| JSON 値 | Java 型 |
|---|---|
| string | String |
| 整数 | Integer(32 ビット範囲を超える場合は Long) |
| 小数 | Double |
| 真偽値 | Boolean |
| null | Object(それ以上推論できない) |
| 配列 | 再帰的に推論された T を持つ List<T> |
なぜラッパー型なのか?
JSON はあらゆるフィールドに null を許可するため、ジェネレーターは int / long / double / boolean のプリミティブではなく Integer / Long / Double / Boolean のラッパー型を出力します。ラッパー型なら null を保持できます。フィールドが必ず存在するとわかっているなら、生成後にプリミティブへ差し替えても問題ありません。
Jackson での利用
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
このパターンが他のすべての例の基礎になります。基本の POJO さえできれば、Lombok を導入したり record に切り替えたり、Jackson 用にアノテーションを足したりするのは段階的な改善で済みます。
ユースケース
ID 単位のリソース取得、キーバリューストアからの設定行、フラットな構造の Webhook ペイロードなど、シンプルな REST API レスポンスの読み込みは、JSON を扱う Java サービスにおけるもっとも一般的なスタート地点です。