Tôi đã lớp sau:Force Jackson để thêm gói addional sử dụng chú thích
public class Message {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Khi chuyển đổi các ví dụ để JSON sử dụng Jackson theo mặc định tôi nhận được:
{"text":"Text"}
Tôi muốn nhận được:
{"message":{"text":"Text"}}
Có chú thích JAXB/Jackson nào tôi có thể sử dụng để đạt được mục tiêu của mình không?
Là một workaround, tôi có thể bọc lớp học của tôi với một lớp khác:
public class MessageWrapper {
private Message message;
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
}
hoặc một giải pháp chung chung hơn:
public class JsonObjectWrapper<T> {
/**
* Using a real map to allow wrapping multiple objects
*/
private Map<String, T> wrappedObjects = new HashMap<String, T>();
public JsonObjectWrapper() {
}
public JsonObjectWrapper(String name, T wrappedObject) {
this.wrappedObjects.put(name, wrappedObject);
}
@JsonAnyGetter
public Map<String, T> any() {
return wrappedObjects;
}
@JsonAnySetter
public void set(String name, T value) {
wrappedObjects.put(name, value);
}
}
Mà có thể được sử dụng như sau:
Message message = new Message();
message.setText("Text");
JsonObjectWrapper<Message> wrapper = new JsonObjectWrapper<Message>("message", message);
Có chú thích JAXB/Jackson nào tôi có thể sử dụng để đạt được không Mục tiêu của tôi?
Cảm ơn.
StaxMan, nếu tên phần tử gốc của Json Chuỗi phải được bỏ qua trong quá trình tuần tự, không Jackson 1.9 đòi hỏi chúng ta để thiết lập các tính năng 'DeserializationConfig.Feature.UNWRAP_ROOT_ELEMENT' một mình hoặc việc bổ sung các chú thích' @JsonRootName 'cũng được yêu cầu? – asgs
Tôi phải xác minh - UNWRAP có thể là đủ; câu hỏi là liệu tên có phải là bản đồ hay không. Nhưng ngay cả khi không có '@ JsonRootName', tên mặc định tồn tại (tên lớp đơn giản), có thể hoạt động tốt. – StaxMan
nó đã hoạt động! cảm ơn rất nhiều. – asgs