Я пытаюсь проанализировать входящий Json (приведенный ниже) объект Java, используя Gson. Json запрос кажется правильным, но я получаю следующее исключение при его синтаксическом анализе.
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 5 column 19 path $.metadata.
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) ~[gson-2.8.5.jar:?]
at com.google.gson.Gson.fromJson(Gson.java:927) ~[gson-2.8.5.jar:?]
Входящий Json запрос:
{
"metadata": {
"salesId": "123",
"promoCode": "2010",
"items": [
{
"0": {
"productCode": "1234",
"total": 169900
},
"1": {
"productCode": "4567",
"total": 19900
}
}
]
}
}
Анализ логики c:
protected <T extends GenericModel> Optional<T> convertFromJson(final String json, final Class<T> clazz) {
if (StringUtils.isEmpty(json)) {
return Optional.empty();
}
return Optional.of(new Gson().fromJson(json, clazz));
}
Java класс:
public class Metadata {
private String salesId;
private String promoCode;
private ArrayList<Object> items = new ArrayList<Object>();
public String getSalesId() {
return salesId;
}
public void setSalesId(String salesId) {
this.salesId = salesId;
}
public String getPromoCode() {
return promoCode;
}
public void setPromoCode(String promoCode) {
this.promoCode = promoCode;
}
public ArrayList<Object> getItems() {
return items;
}
public void setItems(ArrayList<Object> items) {
this.items = items;
}
@Override
public String toString() {
return "Metadata{" +
"salesId=" + getSalesId() +
"promoCode=" + getPromoCode() +
"items=" + getItems() +
'}';
}
}
Обратите внимание, что метаданные. java - это внутренний класс.
Пытались разрешить вопрос, но не повезло. Кто-нибудь может дать мне знать, как это решить? ТИА.