Java Jackson ObjectCodec到字符串json

Java Jackson ObjectCodec到字符串json,java,jackson,jackson-databind,Java,Jackson,Jackson Databind,使用Jackson,我如何安全地将JsonNode强制转换为JSON字符串 public class WrappedMessage extends JsonDeserializer<WrappedMessage> { @Override public WrappedMessage deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {

使用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();
    }
}
公共类WrappedMessage扩展JsonDeserializer{
@凌驾
公共WrappedMessage反序列化(JsonParser jp,反序列化上下文ctxt)
抛出IOException{
ObjectCodec codec=jp.getCodec();
JsonNode=codec.readTree(jp);
JsonNode payload=node.get(“payload”);
//如何将负载获取为JSON
返回新的WrappedMessage();
}
}
使用
ObjectMapper#writeValueAsString
可以做到这一点,我知道在正常情况下
ObjectCode
可以强制转换为
ObjectMapper
,但看起来不是很干净

也可以执行
payload.toString()
,但文档中说明:

方法,该方法将生成开发人员可读的 节点;可能是也可能不是有效的JSON。如果你想要有效的 JSON输出(或使用支持的其他输出之一格式化的输出) 数据格式)确保使用{@link ObjectMapper}或{@link ObjectWriter}来序列化实例,例如:字符串json= objectMapper.writeValueAsString(根节点)

所以这也不安全


我看到的最后一种可能性是构造一个新的
ObjectMapper
,但对我来说效率不高。

一种可能性是创建一个
JsonGenerator
并使用
ObjectCodec.writeTree

StringWriter writer = new StringWriter();
JsonGenerator jgen = codec.getFactory().createGenerator(writer);    
codec.writeTree(jgen, payload);
String jsonPayload = writer.toString();