使用 MultiValuedMap 作为 ResponseBody 给出 {"empty" : false} 作为响应

Using MultiValuedMap as ResponseBody gives {"empty" : false} as response

我正在尝试使用 MultiValuedMap 作为休息服务的 ResponseBody,但我在浏览器中得到的响应是:

{"empty" : false}

这在使用 MultiValueMap 作为 ResponseBody 时工作正常,但在升级 org.apache.commons 库后,MultiValueMap 已被弃用,并提供了使用 MultiValuedMap 的说明。

这是我的代码的相关部分:

import org.apache.commons.collections4.MultiValuedMap;

@RestController("DatabaseDefinitionRestController")
public class DatabaseDefinitionRestController {

    @RequestMapping(value = "/database/{id}/definitions", method = RequestMethod.GET)
    public MultiValuedMap<Long, DatabaseDefinition> mapDatabaseDefinitions(@PathVariable Long id) {
        return databaseDefinitionService.loadDatabaseDefinition(id);
    }
}

我也试过:

import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;

@RestController("DatabaseDefinitionRestController")
public class DatabaseDefinitionRestController {

    @RequestMapping(value = "/database/{id}/definitions", method = RequestMethod.GET)
    public ArrayListValuedHashMap<Long, DatabaseDefinition> mapDatabaseDefinitions(@PathVariable Long id) {
        return databaseDefinitionService.loadDatabaseDefinition(id);
    }
}

如有任何帮助,我们将不胜感激。

无论您使用什么进行序列化,都可能对所有核心 Java 集合(包括 Map)进行特殊情况处理。已弃用的 MultiValueMap 实现了 Map 并因此受益于这种特殊处理。新的 MultiValuedMap,无论出于何种原因,都没有。这使得它依赖于默认的一般处理,这取决于所使用的具体 class 的内部实现。

MultiValuedMap 上调用 asMap() 以获得实现 Map 的视图,并将其放入您的 ResponseBody 以获得特殊情况 Map基于序列化。