I am trying to parse the incoming Json (given below) to Java object using Gson. The Json request seems to be a valid one, but I am getting the following exception while parsing it.
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:?]
Incoming Json request :
{
"metadata": {
"salesId": "123",
"promoCode": "2010",
"items": [
{
"0": {
"productCode": "1234",
"total": 169900
},
"1": {
"productCode": "4567",
"total": 19900
}
}
]
}
}
Parsing logic :
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 class :
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() +
'}';
}
}
Please note that Metadata.java is an inner class.
Have been trying to resolve the issue, but no luck. Could anyone let me know how to solve it? TIA.