如何在StdSerializer Jackson中使用JsonView

时间:2018-07-16 09:26:52

标签: java json jackson jsonserializer json-view

我创建了一个序列化程序,该序列化程序扩展了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。杰克逊没有考虑元素内部的注释,并且serializerProvider.getActiveView()在一次递归调用后丢失了信息。

我该如何解决我的问题。也许StdSerializer不是一个好的解决方案。或者我想念如何使用

方法在StdSerializer中考虑JsonView
jsonGenerator.writeObject(element);

1 个答案:

答案 0 :(得分:0)

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

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