gpt4 book ai didi

java - Jackson - 用根对象包装对象列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:48 25 4
gpt4 key购买 nike

我的 Controller 返回一个 MyObj 对象列表(使用@ResponseBody)

public MyObj 
{
int a;
int b;
}

返回的 JSON 如下所示:

[{"a":1,"b":2},{"a":2,"b":2}]

我想包装这个 JSON,这样它会返回如下内容:

{ "data": [{"a":1,"b":2},{"a":2,"b":2}]}

根据我的阅读,我需要启用 SerializationConfig.Feature.WRAP_ROOT_VALUE 或(?)使用@JsonRootName("data") 在我的 Controller 之上。

还尝试了@XmlRootElement,似乎没有任何效果。知道用根名称包装对象列表的正确方法是什么吗?

最佳答案

听起来你是在谈论将 @JsonRootName 放在列表而不是对象上,这不会完成你想要做的事情。

如果您想使用 @JsonRootName,您需要像上面提到的那样启用 SerializationFeature.WRAP_ROOT_VALUE 并将注释添加到类中:

@JsonRootName("data")
public MyObj {
int a;
int b;
}

这将包装对象本身,不是列表:

{
"listName": [
{
"data": {"a":1, "b":2}
},
{
"data": {"a":2, "b":2}
}
]
}

如果您想将列表包装在一个对象中,也许创建一个通用对象包装器是最好的解决方案。这可以通过这样的类来完成:

public final class JsonObjectWrapper {
private JsonObjectWrapper() {}

public static <E> Map<String, E> withLabel(String label, E wrappedObject) {
return Collections.singletonMap(label, wrappedObject);
}
}

然后,在您将列表连同响应一起发回之前,只需将其包装在 JsonObjectWrapper.withLabel("data", list) 中,Jackson 会处理其余部分。

关于java - Jackson - 用根对象包装对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631635/

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