Supponiamo di avere le seguenti tre classi (getter e setter omesso per brevità):Utilizzando Jackson JSON Generator, come posso scrivere più oggetti su un campo?
@JsonAutoDetect
public class InfoCollection{
private InfoType1 info1;
private InfoType2 info2;
}
@JsonAutoDetect
public class InfoType1{
private String fieldA;
}
@JsonAutoDetect
public class InfoType2{
private String fieldB;
}
I "m cercando di scrivere una funzione JsonSerializer.serialize()
che serializza un oggetto InfoCollection
in questo formato:
{
"allInfo":{
"fieldA":"foo",
"fieldB":"bar"
}
}
Questo è quello che ho adesso:
jsonGenerator.writeStartObject();
jsonGenerator.writeFieldName("allInfo");
jsonGenerator.writeObject(myInfoCollection.getInfo1());
jsonGenerator.writeObject(myInfoCollection.getInfo2());
jsonGenerator.writeEndObject();
che sta causando la seguente eccezione:
org.codehaus.jackson.JsonGenerationException: Can not start an object, expecting field name
Mi manca qualcosa di piccolo o sto andando totalmente in questo modo nel modo sbagliato?
NOTA: Un paio di soluzioni proposte finora coinvolge la scrittura di ogni singolo campo di InfoType1
e InfoType2
. Sto cercando una soluzione che non richiede questo perché mi piacerebbe utilizzare la soluzione su classi enormi con molti campi.
Questo metodo probabilmente funzionerebbe, ma mi ha scritto ogni singolo campo. Sto cercando di trovare una soluzione che possa essere applicata a classi più grandi che hanno molti più campi. –
Utilizzare la riflessione e le annotazioni per individuare i campi per scrivere e creare il generatore da un paio di metodi/classi di supporto che consentono di riutilizzare il codice. –
In alternativa, crea una classe wrapper che ti fornisce un'API più vicina all'output che Jackson dovrebbe creare. –