Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson-使用根对象包装对象列表_Java_Jackson_Object Object Mapping_Mongo Jackson Mapper - Fatal编程技术网

Java Jackson-使用根对象包装对象列表

Java Jackson-使用根对象包装对象列表,java,jackson,object-object-mapping,mongo-jackson-mapper,Java,Jackson,Object Object Mapping,Mongo Jackson Mapper,我的控制器返回MyObj对象的列表(使用@ResponseBody) 返回的JSON如下所示: [{"a":1,"b":2},{"a":2,"b":2}] public final class JsonObjectWrapper { private JsonObjectWrapper() {} public static <E> Map<String, E> withLabel(String label, E wrappedObject) {

我的控制器返回MyObj对象的列表(使用@ResponseBody)

返回的JSON如下所示:

[{"a":1,"b":2},{"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);
    }
}
我想包装这个JSON,这样它将返回如下内容:

{ "data": [{"a":1,"b":2},{"a":2,"b":2}]}
根据我读到的内容,我需要启用SerializationConfig.Feature.WRAP\u ROOT\u值或(?)使用 @JsonRootName(“数据”)位于我的控制器顶部

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

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

如果您想使用
@JsonRootName
,您需要启用
序列化功能。像上面提到的那样包装\u ROOT\u VALUE
,并将注释添加到类中:

@JsonRootName("data")
public MyObj {
    int a;
    int b;
}
这将包装对象本身,而不是列表:

{
    "listName": [
        {
            "data": {"a":1, "b":2}
        },
        {
            "data": {"a":2, "b":2}
        }
    ]
}
如果希望将列表包装到对象中,那么创建通用对象包装器可能是最好的解决方案。这可以通过以下类实现:

[{"a":1,"b":2},{"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{
私有JsonObjectWrapper(){}
带标签的公共静态映射(字符串标签,E wrappedObject){
返回集合。singletonMap(标签,wrappedObject);
}
}

然后,在您将列表与响应一起发送回之前,只需将其包装在
JsonObjectWrapper.withLabel(“data”,list)
中,其余的由Jackson处理。

您知道怎么做吗?我想出了一个迂回的办法,创建一个列表映射,然后让ObjectMapper来做这件事,但这并不那么优雅。我在想有更好的办法。你找到答案了吗?也许是集合。singletonMap(标签,wrappedObject)会更高效、更体贴?很好的建议@charlie_pl!更新了帖子。