Java Jackson ObjectCodec到字符串json
使用Jackson,我如何安全地将JsonNode强制转换为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 {
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();