我创建了一个序列化程序,该序列化程序扩展了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中考虑JsonViewjsonGenerator.writeObject(element);
答案 0 :(得分:0)
我找到了解决方案。您必须使用当前serializerProvider的配置设置一个新的映射器
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
mapper.setConfig(serializerProvider.getConfig());
jsonGenerator.setCodec(mapper);