4.11. JSON の変更点


本セクションでは、JSON の変更点を説明します。

4.11.1. Jackson のカプセル化

Jackson 型を実装する JSON クラスのメソッドがすべて削除されました。代わりに以下の方法を使用してください。

Expand
削除されたフィールド/メソッド新しいメソッド

Json.mapper() フィールド

DatabindCodec.mapper()

Json.prettyMapper() フィールド

DatabindCodec.prettyMapper()

Json.decodeValue(Buffer, TypeReference<T>)

JacksonCodec.decodeValue(Buffer, TypeReference)

Json.decodeValue(String, TypeReference<T>)

JacksonCodec.decodeValue(String, TypeReference)

たとえば、以下のコードを使用します。

  • Jackson の TypeReference を使用する場合:

    • Eclipse Vert.x 3.x リリースの場合:

      List<Foo> foo1 = Json.decodeValue(json, new TypeReference<List<Foo>>() {});
    • Eclipse Vert.x 4 リリースの場合:

      List<Foo> foo2 = io.vertx.core.json.jackson.JacksonCodec.decodeValue(json, new TypeReference<List<Foo>>() {});
  • ObjectMapper の参照:

    • Eclipse Vert.x 3.x リリースの場合:

      ObjectMapper mapper = Json.mapper;
    • Eclipse Vert.x 4 リリースの場合:

      mapper = io.vertx.core.json.jackson.DatabindCodec.mapper();
  • ObjectMapper の設定:

    • Eclipse Vert.x 3.x リリースの場合:

      Json.mapper = someMapper;
    • Eclipse Vert.x 4 以降では、mapper インスタンスを作成することはできません。独自の静的マッパーを使用するか、Databind.mapper() インスタンスを設定する必要があります。

4.11.2. オブジェクトマッピング

以前のリリースでは、Jackson コアおよび Jackson データバインドの依存関係がランタイム時に必要でした。

Eclipse Vert.x 4 以降では、Jackson のコア依存関係のみが必要になります。

オブジェクトマッピング JSON の場合のみ、Jackson データバインドの依存関係が必要になります。この場合は、com.fasterxml.jackson.core:jackson-databind jar のプロジェクト記述子に依存関係を明示的に追加する必要があります。

以下のメソッドは上記の型でサポートされます。

  • メソッド

    • JsonObject.mapFrom(Object)
    • JsonObject.mapTo(Class)
    • Json.decodeValue(Buffer, Class)
    • Json.decodeValue(String, Class)
    • Json.encode(Object)
    • Json.encodePrettily(Object)
    • Json.encodeToBuffer(Object)
    • JsonObject および JsonArray
    • Map および List
    • Number
    • Boolean
    • Enum
    • byte[] および Buffer
    • Instant

以下のメソッドは、Jackson バインドでのみサポートされます。

  • JsonObject.mapTo(Object)
  • JsonObject.mapFrom(Object)

4.11.3. Base64 エンコーダーを JSON オブジェクトおよびアレイの Base64URL に更新

Eclipse Vert.x の JSON 型は RFC-7493 を実装します。以前のリリースの Eclipse Vert.x では、実装は Base64URL ではなく Base64 エンコーダーが誤って使用されていました。Eclipse Vert.x 4 で修正され、JSON 型で Base64URL エンコーダーが使用されました。

Eclipse Vert.x 4 で Base64 エンコーダーを引き続き使用する場合は、設定フラグの legacy を使用できます。以下の例は、Eclipse Vert.x 4 で設定フラグを設定する方法を示しています。

java -Dvertx.json.base64=legacy ...

アプリケーションを部分的に移行した場合は、Eclipse Vert.x 3.x から Eclipse Vert.x 4 への移行中に、バージョン 3 と 4 の両方にアプリケーションが存在します。2 つのバージョンの Eclipse Vert.x がある場合は、次のユーティリティーを使用して Base64 文字列を Base64URL に変換できます。

public String toBase64(String base64Url) {
  return base64Url
    .replace('+', '-')
    .replace('/', '_');
}

public String toBase64Url(String base64) {
  return base64
    .replace('-', '+')
    .replace('_', '/');
}

次のシナリオでは、ユーティリティーメソッドを使用する必要があります。

  • Eclipse Vert.x 3.x リリースから Eclipse Vert.x 4 への移行中に統合の処理。
  • Base64 文字列を使用する他のシステムとの相互運用性の処理。

以下のコード例を使用して、Base64URL を Base64 エンコーダーに変換します。

String base64url = someJsonObject.getString("base64encodedElement")
String base64 = toBase64(base64url);

ヘルパー関数 toBase64 および toBase64Url は、JSON 移行のみを有効にします。オブジェクトマッピングを使用して JSON オブジェクトをアプリケーションの Java POJO に自動的にマップする場合は、カスタムオブジェクトマッパーを作成して、Base64 文字列を Base64URL に変換する必要があります。

次の例は、カスタム Base64 デコーダーを使用してオブジェクトマッパーを作成する方法を示しています。

// simple deserializer from Base64 to byte[]
class ByteArrayDeserializer extends JsonDeserializer<byte[]> {
  ByteArrayDeserializer() {
  }

  public byte[] deserialize(JsonParser p, DeserializationContext ctxt) {
    String text = p.getText();
    return Base64.getDecoder()
      .decode(text);
  }
}

// ...

ObjectMapper mapper = new ObjectMapper();

// create a custom module to address the Base64 decoding
SimpleModule module = new SimpleModule();
module.addDeserializer(byte[].class, new ByteArrayDeserializer());
mapper.registerModule(module);

// JSON to POJO with custom deserializer
mapper.readValue(json, MyClass.class);

4.11.4. 信頼オプションから JSON コンバーターメソッドを削除

TrustOptions.toJSON メソッドが削除されました。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る