У меня есть веб-сервис на Java с Джерси для создания и редактирования цен на рынке. Для этого я отправляю объект JSON, содержащий информацию о рынке, включая другой объект JSON для цен.JSON - Ошибка при установке строки JSON внутри объекта JSON
Например, это JSON я отправляю через Почтальон:
{
"name": "Market 01",
"address": "Market 01 street",
"prices": "{\"watermelon\": \"5.40\", \"melon\": \"2.55\"}"
}
На стороне веб-сервера, я пытаюсь создать список цен, используя GSON, но я не могу получить это работать. Моя цель здесь - проверить разницу между новыми ценами и текущими ценами. Ниже есть мой POJO Price.java, что я пытаюсь сделать на контроллере для редактирования и Exception я адресности на Почтальон:
POJO - Price.java
public class Price {
private String nome;
private Double preco;
//Getters and setters also
}
MarketController .java
Collection<Price> prices = gson.fromJson(json, new TypeToken<List<Price>>(){}.getType());
Исключение возникает на MarketController.java:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
EDIT: Решение, которое работало для меня на основе @ A2h ответа:
POJO класса - Price.java
public class Price {
private String name;
private Double price;
...
@Override
public String toString() {
return "{\"name\":\"" + name + "\", \"price\":" + price + "}";
}
}
POJO класс - Market.java
public class Market{
...
//Include as a List<Price>
private List<Price> prices;
...
}
MarketController.java
// When going from List<Price> to JSON String
String prices = gson.toJson(market.getPrices());
// When going from JSON String to List<Price>
List<Price> prices = gson.fromJson(jsonString, new TypeToken<List<Price>>(){}.getType());
Этот код хорошо округлен для этой ситуации, где вам необходимо перекрыть rm из списка в строку JSON и наоборот.
Как я могу заставить это работать с Hibernate? Я имею в виду, моя цель - хранить цены в виде строки JSON на БД. – Minoru
Ну, это другой вопрос, но я предполагаю, что у вас есть именованный запрос, к которому вы можете передать строку JSON и сохранить его в поле вашего выбора таблицы.Затем, всякий раз, когда вы читаете эту строку JSON, вы можете построить «объект», как описано выше. – ahoxha
Я сделал то, что вы ответили, и теперь я могу получить JSON и сохранить его в БД. Проблема заключается в том, что я пытаюсь воссоздать список для сравнения с новым. Можно ли сравнивать, не пересоздавая список, или мне действительно нужно сделать этот шаг? –
Minoru