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
ですが、私にはあまり効率的ではないようです。