
Jakarta EE 12 では Jakarta JSON Binding 3.0 → 3.1 のマイナーバージョンアップが予定されている。
2026年03月時点では大きな変更は無く、java.util.UUID と Java Record サポートの追加程度。
java.util.UUID のマッピング追加
- Issue : Add Official Behivor to Serialize/Deserialize UUID
- PR : Specify default mapping for java.util.UUID
java.util.UUID のマッピングは、Eclipse Yasson 実装でサポート済み。 Apache Johnzon 実装では未サポート。
JSON-B 仕様として追加され、Apache Johnzon 実装でも利用可能となる。
Java Record のサポート追加
- Issue : Add support for Java Record
- PR : Java Record support
以下のようにシリアライズ/デシリアライズできる。
public record Dog(String name, int age, boolean bites) { } Dog dog = new Dog("Falco", 4, false); // Create Jsonb and serialize Jsonb jsonb = JsonbBuilder.create(); String result = jsonb.toJson(dog); // Deserialize back dog = jsonb.fromJson("{\"name\":\"Falco\",\"age\":4,\"bites\":false}", Dog.class);
レコードコンポーネントに別名を付ける場合は、@JsonbProperty で以下のように行う。
public record Person(@JsonbProperty("person-name") String name, String profession) {}
以下のようにすることも可能。
public record Person(String name, String profession) { @JsonbProperty("person-name") public String name() { return name; } }
以下のようにシリアライズされる。
{ "person-name": "Jason Bourne", "profession": "Super Agent" }
Date/Number フォーマットを指定する場合は以下。
public record Person(String name, @JsonbDateFormat("dd.MM.yyyy") LocalDate birthDate, @JsonbNumberFormat("#0.00") BigDecimal salary) { }
デシリアライズで独自のコンストラクタを使う場合は @JsonbCreator を使う。
public record Person(String name, String profession) { @JsonbCreator public Person(@JsonbProperty("name") String name) { this(name, "someValue"); } }