如何通过自定义JsonSerializer传递上下文? (Java,ObjectMapper)

时间:2018-09-17 14:56:09

标签: java jackson

我有自定义的JsonSerializer:

new JsonSerializer<T>() {
    @Override
    public void serialize(T instance, JsonGenerator gen, SerializerProvider sp) throws IOException, JsonProcessingException
    {
        try {
            instance = someFunction(instance);
            SerializableString serializableString = new SerializedString(defaultMapper.writeValueAsString(instance));
            gen.writeRawValue(serializableString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

对我来说,我需要一种方法将gen.getOutputContext()传递给defaultMapper.writeValueAsString(instance)。有没有办法做到这一点?还是我使用ObjectMapper的方式错误?谢谢您的见识。

编辑:defaultMapper的类型为ObjectMapper

2 个答案:

答案 0 :(得分:1)

ObjectMapper实际上具有我需要的内置方法-ObjectMapper.writeValue(JsonGenerator, T)。我的问题中的修改后的代码(具有功能):

new JsonSerializer<T>() {
    @Override
    public void serialize(T instance, JsonGenerator gen, SerializerProvider sp) throws IOException, JsonProcessingException
    {
        try {
            instance = someFunction(instance);
            defaultMapper.writeValue(gen, instance)
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

在这里尽力帮助您!

我没有Java环境设置,但是使用Jackson JSON包的示例在此处:http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/

让我知道这是否有帮助!

根据教程,取决于对象的设置方式,您可以通过“ writeVaueAsString(object o)和方法” writerWithDefaultPrettyPrinter()方法一起使用对象映射器对象,以获取可读的JSON字符串

但是,这不是“自定义”序列化器/反序列化器。

此解决方案对您有用吗?