gpt4 book ai didi

java - 强制 jackson 使用注释添加额外的包装

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:14 25 4
gpt4 key购买 nike

我有以下类(class):

public class Message {
private String text;

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}
}

当默认使用 Jackson 将实例转换为 JSON 时,我得到:

{"text":"Text"}

我想得到:

{"message":{"text":"Text"}}

我可以使用任何 JAXB/Jackson 注释来实现我的目标吗?

作为解决方法,我可以用另一个类包装我的类:

public class MessageWrapper {
private Message message;

public Message getMessage() {
return message;
}

public void setMessage(Message message) {
this.message = message;
}
}

或更通用的解决方案:

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);
}
}

可以这样使用:

Message message = new Message();
message.setText("Text");
JsonObjectWrapper<Message> wrapper = new JsonObjectWrapper<Message>("message", message);

我可以使用任何 JAXB/Jackson 注释来实现我的目标吗?

谢谢。

最佳答案

使用 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;
}

关于java - 强制 jackson 使用注释添加额外的包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com