У меня есть следующие POJO:десериализация JSON в объект с HashMap, используя Джерси 2,2
public class Reservation {
private String name;
private BigDecimal price;
private ArrayList<HashMap<String, Object>> products;
...getters & setters for all fields....
}
и этот простой Java-Джерси REST ресурс:
@POST
@Consumes({MediaType.APPLICATION_JSON})
public String insert(Reservation re) {
//do something here with ReservationEntity
}
Когда я запрос POST со следующим данные:
{
"name":"michal",
"price":1234.3,
"products":[
{"id":1, "desc":"qwerty"},
{"id":2, "desc":"ytrewq"}
]
}
Я ожидаю получить объект класса Бронирование со списком продуктов из данных JSON. Однако я получаю объект, который имеет только имя и цену. Продукты ArrayList пустые.
Я пытался использовать org.codehaus.jackson.map.ObjectMapper для десериализации данных JSON как это:
String data = "{\"name\":\"micha\".....}";
ObjectMapper om = new ObjectMapper();
Reservation re = om.readValue(data, Reservation.class);
После этого объекта повторно были две записи (HashMaps) в ArrayList продуктах, как ожидалось. Я не люблю использовать объект mapper таким образом, поэтому я спрашиваю, как это сделать только с Джерси. Я прочитал много статей по этим вопросам, большинство из них посоветовали поставить в web.xml, как это:
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.foobar.rest.services;org.codehaus.jackson.jaxrs</param-value>
</init-param>
Это не работа для меня тоже. Я даже не имею какое-либо заявление в моем web.xml
Я использую: - Glassfish 4,0 - Джерси 2,2
EDIT: Я создал репозиторий с очень простым проектом на GitHub: Jersey22 Есть два метода POST в классе MyResource с путями:/рабочие и/notworking
Я оценил бы любой рабочий пример. Спасибо.
Спасибо Enrichman, я пробовал с Джерси 1.17.1, и все сработало хорошо. Мне пришлось поставить эту строку: com.mycompany.jersey17; org.codehaus.jackson.jaxrs param-value> в определение в web.xml. Я попытался сделать то же самое с Джерси 2.2, но не повезло .. –
Я также попытался использовать Список, как предложил @Enrichman - я переместил HashMap в класс Product. После создания этого списка продуктов, но HashMap внутри продукта был пуст. –
Я предлагаю вам объект Product, чтобы удалить HashMap и использовать просто простой идентификатор и описание в качестве поля продукта, кстати. Я загрузил ваш проект, теперь я немного поиграю с ним. :) – Enrichman