0

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);
4

1 に答える 1