Stripe Customer オブジェクト用の Java POJO を生成する
Stripe Customer JSON レスポンスを snake_case マッピング、ネスト住所、メタデータ Map を備えた Java POJO に変換します。
Real-world
詳細な説明
Stripe Customer → Java
Stripe の Customer オブジェクトは金融 API レスポンスの代表例です。深いネスト、snake_case キー、必須/nullable の混在、ユーザー定義データのための拡張可能な metadata マップが揃っています。
サンプルペイロード(抜粋)
{
"id": "cus_NffrFeUfNV2Hib",
"object": "customer",
"balance": 0,
"created": 1680893993,
"currency": "usd",
"default_source": null,
"delinquent": false,
"description": null,
"email": "jenny.rosen@example.com",
"name": "Jenny Rosen",
"phone": null,
"address": {
"city": "South San Francisco",
"country": "US",
"line1": "354 Oyster Point Blvd",
"postal_code": "94080"
},
"metadata": { "internal_user_id": "u_42" },
"tax_exempt": "none"
}
生成される POJO 階層
package com.example.stripe;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Map;
public class Customer {
private String id;
private String object;
private Long balance;
private Long created;
private String currency;
@JsonProperty("default_source")
private String defaultSource;
private Boolean delinquent;
private String description;
private String email;
private String name;
private String phone;
private Address address;
private Map<String, String> metadata;
@JsonProperty("tax_exempt")
private String taxExempt;
// アクセサ
}
public class Address {
private String city;
private String country;
private String line1;
@JsonProperty("postal_code")
private String postalCode;
// アクセサ
}
Stripe スキーマに関するメモ
balanceとcreatedはLong推奨 — Stripe は Unix タイムスタンプ(10 桁の整数)を使います。現状はIntegerに収まりますが、2038 年に2_147_483_648を超えるとLongへの移行が必要になります。- 金額は最小通貨単位 —
balanceの 0 は USD で 0.00 ドルを意味します。アプリケーション層で BigDecimal に変換しましょう。 metadataはフリーフォームな Map で、String → String(Stripe が値を文字列に強制)です。常にMap<String, String>でモデリングし、クラスにはしないでください。tax_exemptは列挙型の文字列 —none、exempt、reverse。生成後に Java enum へ整理すると安全です。
Address を record でリファイン
public record Address(String city, String country, String line1,
@JsonProperty("postal_code") String postalCode) {}
公式 Stripe SDK という選択肢
Stripe は公式 Java SDK を提供しており、すべての API リソースに対応する型付き POJO が同梱されています。Webhook ペイロードのラップ、SDK バージョンとの分離、消費フィールドだけに絞ったモデルが必要な場合に限り、自前生成の出番です。
ユースケース
サブスクリプション課金統合、マーケットプレイス、SaaS の課金分析などでは、フル SDK クラスではなくプロジェクト固有のスリムな Stripe オブジェクト表現が欲しいことがよくあります。生成 POJO なら使うフィールドだけを正確に手に入れられます。