4.11. JSON の変更点
本セクションでは、JSON の変更点を説明します。
4.11.1. Jackson のカプセル化 リンクのコピーリンクがクリップボードにコピーされました!
Jackson 型を実装する JSON クラスのメソッドがすべて削除されました。代わりに以下の方法を使用してください。
| 削除されたフィールド/メソッド | 新しいメソッド |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
たとえば、以下のコードを使用します。
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 メソッドが削除されました。