Tôi đã có các lớp sau:Jackson JSON không quấn thuộc tính của đối tượng lồng nhau
public class Container {
private String name;
private Data data;
}
public class Data {
private Long id;
}
Khi tôi serialize Container
lớp sử dụng Jackson tôi nhận được
{"name":"Some name","data":{"id":1}}
Nhưng tôi cần kết quả là:
{"name":"Some name","id":1}
Có thể (không thêm phương thức Container.getDataId()
) không? Nếu vậy, làm thế nào để làm điều đó?
cập nhật
tôi đã cố gắng để tạo ra tùy chỉnh JsonSerializer<Data>
nhưng kết quả là giống như trước
public class JsonDataSerializer extends JsonSerializer<Data> {
private static Logger logger = Logger.getLogger(JsonDataSerializer.class);
@Override
public void serialize(Data value, JsonGenerator jgen,
SerializerProvider provider)
throws IOException,JsonProcessingException {
Long id = (value.getId() == null) ? 0l : value.getId();
jgen.writeStartObject();
jgen.writeNumberField("id", id);
jgen.writeEndObject();
logger.debug("Data id " + id + " serialized to JSON.");
}
}
Tôi cũng đã cố gắng thêm @JsonSerialize
chú thích trên Data
lớp, sau đó trên getter trong lớp Container
. Như tôi đã đề cập trước đây mà không có bất kỳ thành công nào. Trình nối tiếp của tôi được sử dụng, thông điệp nhật ký nhật ký.
cập nhật 2
Khi tôi loại bỏ writeStartObject()
và writeEndObject()
sau đó không JSON là returnesd, chỉ HTTP Status 500
lỗi và không có ngoại lệ được ném ngoại trừ những gì tôi tìm thấy trong kết xuất debug.
DEBUG: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver - Resolving exception from handler [[email protected]]: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Can not write a field name, expecting a value; nested exception is org.codehaus.jackson.JsonGenerationException: Can not write a field name, expecting a value
DEBUG: org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - Resolving exception from handler [[email protected]]: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Can not write a field name, expecting a value; nested exception is org.codehaus.jackson.JsonGenerationException: Can not write a field name, expecting a value
DEBUG: org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [[email protected]]: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Can not write a field name, expecting a value; nested exception is org.codehaus.jackson.JsonGenerationException: Can not write a field name, expecting a value
điều gì sẽ xảy ra nếu bạn bỏ qua các dòng writeStartObject() và writeEndObject()? –
bạn có lẽ chỉ cần viết giá trị: writeNumber (id) –
Có, ghi bằng cách sử dụng chỉ 'writeNumber (id)' làm việc ít nhất là một số trường hợp. Dữ liệu đầu ra là "" dữ liệu ": 1'. Nhưng nếu tôi muốn tuần tự hóa nhiều hơn thì một thuộc tính trong lớp 'Dữ liệu'? Tôi đã cố gắng thêm các phương thức 'write * Field' có và không có' write {Start, End} Object' mà không có may mắn – kurochenko