有没有办法通过 Rest 服务发送 Map<String, CustomObject>?
Is there a way to send Map<String, CustomObject> via Rest service?
我有一个服务器应用程序,我在其中公开了一些服务。我在 Grizzly Jersey 服务器上 运行 这个应用程序。
我还有一个客户端应用程序,我在其中调用服务器应用程序公开的服务。我再次使用 Jersey 客户端来调用服务。
现在我有一个要求,我想 return:
Map<String, CustomObject>
来自服务器应用程序中编写的其余服务,我希望使用我的客户端的其他应用程序能够检索相同的地图,而不会遇到任何麻烦。
到目前为止,我一直在从服务器应用程序传递 CustomObject(s),并且我的客户端正确地反序列化了自定义对象。这是有效的,因为我已经在我的 Jersey Client 中注册了 JacksonJaxbJsonProvider 实例。
我已经创建了一个服务 returns:
Map<String, CustomObject>
但是这里的问题是在接收端我得到:
Map<String, Map<String, String>>
基本上,当 return 从服务中获取 Map 时,我的 CustomObject 被序列化为 JSON,这可以是可视化为:
Map<String, String>
但在接收端它不会反序列化回 CustomObject。重申一下,在我 return 仅来自服务的 CustomObject 的情况下,它可以正常工作(反序列化)。
我知道我可以遍历主 Map 并在客户端使用 ObjectMapper 将内部 Map 转换为 CustomObject,但这是我想避免的事情,因为可能有数千个 CustomObjects 可用.
有人可以帮忙吗?
反序列化 json 时必须声明目标对象的类型。
例如:
TypeReference<HashMap<String, CustomObject>> typeReference = new TypeReference<HashMap<String, CustomObject>>() {};
Map<String, CustomObject> result = mapper.readValue(jsonInput, typeReference);
我有一个服务器应用程序,我在其中公开了一些服务。我在 Grizzly Jersey 服务器上 运行 这个应用程序。
我还有一个客户端应用程序,我在其中调用服务器应用程序公开的服务。我再次使用 Jersey 客户端来调用服务。
现在我有一个要求,我想 return:
Map<String, CustomObject>
来自服务器应用程序中编写的其余服务,我希望使用我的客户端的其他应用程序能够检索相同的地图,而不会遇到任何麻烦。
到目前为止,我一直在从服务器应用程序传递 CustomObject(s),并且我的客户端正确地反序列化了自定义对象。这是有效的,因为我已经在我的 Jersey Client 中注册了 JacksonJaxbJsonProvider 实例。
我已经创建了一个服务 returns:
Map<String, CustomObject>
但是这里的问题是在接收端我得到:
Map<String, Map<String, String>>
基本上,当 return 从服务中获取 Map 时,我的 CustomObject 被序列化为 JSON,这可以是可视化为:
Map<String, String>
但在接收端它不会反序列化回 CustomObject。重申一下,在我 return 仅来自服务的 CustomObject 的情况下,它可以正常工作(反序列化)。
我知道我可以遍历主 Map 并在客户端使用 ObjectMapper 将内部 Map 转换为 CustomObject,但这是我想避免的事情,因为可能有数千个 CustomObjects 可用.
有人可以帮忙吗?
反序列化 json 时必须声明目标对象的类型。 例如:
TypeReference<HashMap<String, CustomObject>> typeReference = new TypeReference<HashMap<String, CustomObject>>() {};
Map<String, CustomObject> result = mapper.readValue(jsonInput, typeReference);