【问题标题】:How to use JsonView in a StdSerializer Jackson如何在 StdSerializer Jackson 中使用 JsonView
【发布时间】:2018-12-23 19:25:10
【问题描述】:

我创建了一个序列化器,它扩展了 StdSerializer 以将对象列表转换为 json 中的许多对象。

来自

List<MyParentObject> myList = new LinkedList();    
public class MyParentObject{ private String nameOfObject; }

{
 "_elementNames":['object1','object2'],
 "object1":{...},
 "object2":{...}
}

感谢我的序列化程序,它可以正常工作。

public class CustomElementListSerializer extends StdSerializer<List<AbstractElement>> {

    @Override
    public void serialize(List<AbstractElement> elements, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        List<String> eltNames = new LinkedList<>();
        System.err.println( serializerProvider.getActiveView());
        jsonGenerator.writeNull();
        for (AbstractElement element : elements) {
            String nameProperty = Element.getElement().getElementId();
            eltNames.add(nameProperty);
            jsonGenerator.writeFieldName(nameProperty);
            jsonGenerator.writeObject(element);                
        }          
        jsonGenerator.writeFieldName("_elementNames");
        jsonGenerator.writeStartArray();
        for (String eltName : eltNames) {
            jsonGenerator.writeString(eltName);
        }
        jsonGenerator.writeEndArray();        
    }
}

但我不能同时使用@JsonView。 Jackson 没有考虑元素内部的注释,serializerProvider.getActiveView() 在一次递归调用后丢失了信息。

如何解决我的问题。也许 StdSerializer 不是好的解决方案。或者我想念如何使用该方法考虑 StdSerializer 中的 JsonView

jsonGenerator.writeObject(element);

【问题讨论】:

    标签: java json jackson jsonserializer json-view


    【解决方案1】:

    我找到了解决方案。您必须使用当前 serializerProvider 的配置设置一个新的映射器

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
    mapper.setConfig(serializerProvider.getConfig());
    jsonGenerator.setCodec(mapper);
    

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2015-12-21
      • 1970-01-01
      • 2020-07-03
      • 2019-02-27
      • 2018-01-31
      相关资源
      最近更新 更多