我有以下课程:
public class Message {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Run Code Online (Sandbox Code Playgroud)
在默认情况下使用Jackson将实例转换为JSON时,我得到:
{"text":"Text"}
Run Code Online (Sandbox Code Playgroud)
我想得到:
{"message":{"text":"Text"}}
Run Code Online (Sandbox Code Playgroud)
是否有任何JAXB/Jackson注释可用于实现我的目标?
作为一种解决方法,我可以用另一个类包装我的类:
public class MessageWrapper {
private Message message;
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
}
Run Code Online (Sandbox Code Playgroud)
或更通用的解决方案:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
哪个可以这样使用:
Message message = new Message();
message.setText("Text");
JsonObjectWrapper<Message> wrapper = new JsonObjectWrapper<Message>("message", message);
Run Code Online (Sandbox Code Playgroud)
是否有任何JAXB/Jackson注释可用于实现我的目标?
谢谢.
Sta*_*Man 13
解决方法:你不一定需要那些getter/setter,所以可能只有:
public class MessageWrapper {
public Message message;
}
Run Code Online (Sandbox Code Playgroud)
或者可能添加便利构造函数:
public class MessageWrapper {
public Message message;
@JsonCreator
public MessageWrapper(@JsonProperty("message") Message m) {
message = m;
}
}
Run Code Online (Sandbox Code Playgroud)
还有一种方法可以添加包装; 用1.9你可以使用SerializationConfig.Feature.WRAP_ROOT_ELEMENT和DeserializationConfig.Feature.UNWRAP_ROOT_ELEMENT.如果要更改包装器名称(默认情况下它只是非限定类名称),则可以使用@JsonRootName注释
Jackson 2.0通过ObjectReader和ObjectWriterJAX-RS注释添加了更多动态选项.
在Jackson 2.x中,可以使用以下命令启用包装程序,而无需在ObjectMapper中添加其他属性
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
@JsonTypeName(value = "student")
public class Student {
private String name;
private String id;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13774 次 |
| 最近记录: |