Giả sử tôi đã ba loại sau đây (getter và setter bỏ qua cho ngắn gọn):Sử dụng trình tạo JSON JSON, làm thế nào tôi có thể viết nhiều đối tượng vào một trường?
@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 cố gắng để viết một hàm JsonSerializer.serialize()
rằng serializes một đối tượng InfoCollection
ở định dạng này:
{
"allInfo":{
"fieldA":"foo",
"fieldB":"bar"
}
}
Đây là những gì tôi có bây giờ:
jsonGenerator.writeStartObject();
jsonGenerator.writeFieldName("allInfo");
jsonGenerator.writeObject(myInfoCollection.getInfo1());
jsonGenerator.writeObject(myInfoCollection.getInfo2());
jsonGenerator.writeEndObject();
gây ra ngoại lệ sau:
org.codehaus.jackson.JsonGenerationException: Can not start an object, expecting field name
Tôi có thiếu cái gì đó nhỏ hoặc tôi hoàn toàn đi về con đường sai?
LƯU Ý: Một vài giải pháp được đề xuất cho đến nay liên quan đến việc viết từng trường riêng lẻ InfoType1
và InfoType2
. Tôi đang tìm một giải pháp mà không yêu cầu điều này bởi vì tôi muốn sử dụng các giải pháp trên các lớp học lớn với nhiều lĩnh vực.
Phương pháp này có thể hoạt động, nhưng nó đã cho tôi viết từng trường riêng lẻ. Tôi đang cố gắng đưa ra một giải pháp mà tôi có thể áp dụng cho các lớp học lớn hơn có nhiều lĩnh vực hơn. –
Sử dụng phản ánh và chú thích để định vị các trường để viết và tạo trình tạo từ một vài phương thức/lớp trợ giúp cho phép bạn sử dụng lại mã. –
Hoặc, tạo một lớp bao bọc cho bạn một API gần với đầu ra mà Jackson sẽ tạo ra. –