Jakarta JSON Binding 3.1


Jakarta EE 12 では Jakarta JSON Binding 3.0 → 3.1 のマイナーバージョンアップが予定されている。

2026年03月時点では大きな変更は無く、java.util.UUID と Java Record サポートの追加程度。


java.util.UUID のマッピング追加

java.util.UUID のマッピングは、Eclipse Yasson 実装でサポート済み。 Apache Johnzon 実装では未サポート。

JSON-B 仕様として追加され、Apache Johnzon 実装でも利用可能となる。


Java Record のサポート追加

以下のようにシリアライズ/デシリアライズできる。

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");
    }

}