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