Есть ли способ отправить Map <String, CustomObject> через сервис Rest? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть серверное приложение , где я выставил некоторые службы.Я запускаю это приложение на сервере Grizzly Jersey.

У меня также есть клиентское приложение , в котором я вызываю службы, предоставляемые серверным приложением.Я снова использую клиент Джерси для вызова сервисов.

Теперь у меня есть требование, в котором я хочу вернуть:

    Map<String, CustomObject>

из службы остальных, написанной в серверном приложении, и я хочу, чтобы другиеприложения, использующие мой клиент, чтобы иметь возможность извлекать ту же карту, что и сейчас, без каких-либо хлопот.

До сих пор я передавал CustomObject (s) из серверного приложения, и мой клиент десериализуетпользовательские объекты правильно.Это работает, потому что я зарегистрировал JacksonJaxbJsonProvider экземпляр с моим клиентом в Джерси.

Я уже создал службу, которая возвращает:

    Map<String, CustomObject>

Но проблема здесь заключается вполучая конец, я получаю:

    Map<String, Map<String, String>>

В основном при возврате Map из сервиса мой CustomObject сериализуется в JSON, который можно визуализировать как:

    Map<String, String>

но на принимающей стороне он не десериализован обратно в CustomObject.Просто чтобы повторить, это работает (десериализуется) нормально в случаях, когда я возвращаю только CustomObject из сервиса.

Я знаю, что могу пройти по основной карте и преобразовать внутреннюю карту в CustomObject, используя ObjectMapper на стороне клиентано это то, чего я хочу избежать, так как могут быть доступны тысячи пользовательских объектов.

Может кто-нибудь помочь здесь?

1 Ответ

0 голосов
/ 13 июня 2019

Вы должны объявить тип целевого объекта при десериализации вашего json. Например:

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