1

Jackson では、JsonNode を JSON 文字列に安全にキャストするにはどうすればよいでしょうか。

public class WrappedMessage extends JsonDeserializer<WrappedMessage> {
    @Override
    public WrappedMessage deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException {
        ObjectCodec codec = jp.getCodec();

        JsonNode node = codec.readTree(jp);
        JsonNode payload = node.get("payload");
        // How to get the payload as JSON

        return new WrappedMessage();
    }
}

でこれを行うことができObjectMapper#writeValueAsString、通常のコンテキストでObjectCodeは にキャストできることはわかっていますObjectMapperが、あまりきれいではないようです。

も可能ですpayload.toString()が、ドキュメントには次のように記載されています。

ノードの開発者が読み取り可能な表現を生成するメソッド。これは、有効な JSON である場合とそうでない場合があります。有効な JSON 出力 (または Jackson がサポートする他のデータ形式のいずれかを使用してフォーマットされた出力) が必要な場合は、必ず {@link ObjectMapper} または {@link ObjectWriter} を使用してインスタンスをシリアル化してください。例: String json = objectMapper.writeValueAsString(rootNode );

したがって、これを使用しても安全ではありません。

私が見る最後の可能性は、 new を構築することObjectMapperですが、私にはあまり効率的ではないようです。

4

1 に答える 1