Джерси 2.0 Конвертация HashMap в/из Json

У меня такой Json, который предоставляется веб-сервисом:

{ ... 
 "metadata": {
 "name": "test_server",
 "server_type": "test",
 ...
 },
 ...
}

Я использую средства GLasshfish, Netbeans и Jersey для использования веб-ресурсов из WS. Согласно функциям Джерси, я использую некоторые классы Java, которые отображают структуру Json, чтобы получить преобразование в структурах данных с использованием Джерси (и аннотации JAX-RS). Для указанного пакета Json я создал этот класс:

public class Server 
 {
 ...
 private Map<string, string=""> metadata = new HashMap<string, string="">();
 ...
 public Server(){}
 }
</string,></string,>

Отображение работает отлично, за исключением атрибута "metadata", который структурирован как карта с произвольной длиной, а String - как ключ, так и значение. После этого преобразования результат следующий:

{
 "metadata": {
 "entry":[]
 }
}

У меня есть похожий случай, но нет решения. Похоже, что Джерси 2.0 не может преобразовать атрибут JSL-структуры карты в соответствующую структуру Java Data Object (HashMap). На сервере нет никаких исключений или ошибок, но печатная json-карта всегда содержит "запись": [], и я не знаю, откуда она. С другими типами объектов или типами данных у меня нет проблем (List, int, String... все работает отлично). Может кто-нибудь мне помочь? Спасибо за поддержку!

1 ответ

Я тестировал строку JSON, предоставленную вами, и работает с помощью TypeReference и ObjectMapper, которые возвращают Map<string, map<string,="" string="">></string,> в соответствии с этой строкой JSON.

Вот код:

String jsonString = "{\"metadata\": {\"name\": \"test_server\",\"server_type\": \"test\"}}";
TypeReference<map<string, map<string,="" string="">>> typeRef = 
 new TypeReference<map<string, map<string,="" string="">>>() {};
ObjectMapper mapper = new ObjectMapper();
try {
 Map<string, map<string,="" string="">> jsonObject = 
 mapper.readValue(jsonString, typeRef);
 System.out.println(jsonObject.get("metadata"));
} catch (Exception e) {
 System.out.println("Three might be some issue wiht the JSON string");
}
</string,></map<string,></map<string,>

выход:

{name=test_server, server_type=test}

licensed under cc by-sa 3.0 with attribution.