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()
1 回の再帰呼び出しで情報を失いました。
どうすれば問題を解決できますか。多分 StdSerializer は良い解決策ではありません。または、メソッドを使用して StdSerializer 内の JsonView を考慮する方法を見逃しています
jsonGenerator.writeObject(element);