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 スキーマに関するメモ

  • balancecreatedLong 推奨 — 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 は列挙型の文字列noneexemptreverse。生成後に 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 なら使うフィールドだけを正確に手に入れられます。

試してみる — JSON to Java

フルツールを開く