是否可以通过Rest服务发送Map <String,CustomObject>?

时间:2019-06-13 11:24:42

标签: java rest serialization deserialization json-deserialization

我有一个服务器应用程序,其中提供了一些服务。我正在Grizzly Jersey服务器上运行此应用程序。

我还有一个客户端应用程序,其中我调用服务器应用程序公开的服务。再次,我正在使用Jersey客户端调用服务。

现在我有一个要求返回的条件:

    Map<String, CustomObject>

使用服务器应用程序中编写的其余服务,我希望其他使用客户端的应用程序能够像原样检索相同的地图。

到目前为止,我一直在从服务器应用程序传递 CustomObject ,我的客户端正确地反序列化了自定义对象。之所以有效,是因为我已经在Jersey客户中注册了 JacksonJaxbJsonProvider 实例。

我已经创建了一个返回以下内容的服务

    Map<String, CustomObject>

但是这里的问题是在接收端:

    Map<String, Map<String, String>>

基本上,从服务中返回地图时,我的 CustomObject 被序列化为JSON,可以将其可视化为:

    Map<String, String>

,但是在接收端,它不会反序列化回CustomObject。重申一下,在我仅从服务返回CustomObject的情况下,它可以正常工作(反序列化)。

我知道我可以遍历主Map并使用客户端的 ObjectMapper 将内部Map转换为CustomObject,但这是我要避免的事情,因为可能有成千上万的CustomObjects。

有人可以在这里帮忙吗?

1 个答案:

答案 0 :(得分:0)

反序列化json时,必须声明目标对象的类型。 例如:

TypeReference<HashMap<String, CustomObject>> typeReference = new TypeReference<HashMap<String, CustomObject>>() {};
Map<String, CustomObject> result = mapper.readValue(jsonInput, typeReference);