java - problem - swagger gradle spring boot
AnĂ¡lisis JSON con Jackson Java (1)
Tengo un problema al analizar JSON con Jackson. Tengo un objeto POJO , envuelto por otro.
Aquí está mi código:
in main:
ObjectMapper mapper = new ObjectMapper();
List<ItemBean> mpl2 = mapper.readValue(col.toString(),new TypeReference<List<ItemBean>>() {});
my POJO class:
public class ItemBean implements Serializable {
private List<Item> items;
@JsonProperty("Item")
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}
public class Item implements Serializable{
public String field1;
public Integer field2;
public static final class Field3 extends GenericJson {
private String subfield1;
private String subfield2;
}
}
Y aquí está la excepción lanzada:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "item" (Class bean.item), not marked as ignorable
at [Source: java.io.StringReader@101b6d56; line: 4, column: 16] (through reference chain: bean.ItemBean["items"]->bean.Item["item"])
JSON se ve de la siguiente manera:
["{/n
/"items/":
[
/n {
/n /"item/": {
/n /"field1/": /"val1/",
/n /"field2/": /"val2/",
/n /"field3/": [
/n {
/n /"subfield1/": subval
/n /"subfield2/": subval
/n }
/n ]
/n }
/n },
/n /"item/": {
/n /"field1/": /"val1/",
/n /"field2/": /"val2/",
/n /"field3/": [
/n {
/n /"subfield1/": subval
/n /"subfield2/": subval
/n }
/n ]
/n }
/n },
/n /"item/": {
/n /"field1/": /"val1/",
/n /"field2/": /"val2/",
/n /"field3/": [
/n {
/n /"subfield1/": subval
/n /"subfield2/": subval
/n }
/n ]
/n }
/n },
etc...... may I haven''t closed brackets correctly, but they are correct :)
}
]
"]
POJO repite totalmente los campos del objeto JSON.
Escribí mi propio método, que analiza JSON de dicha estructura.
Aquí está el código:
public static List parseList(String jsonInput, Class clazz) {
List result = new LinkedList();
JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonInput);
JSONObject items = (JSONObject)json.getJSONObject(0);
JSONArray dataArrayJSON = (JSONArray)items.getJSONArray("items");
for (int i = 0; i < dataArrayJSON.size(); i++) {
result.add(JSONObject.toBean(dataArrayJSON.getJSONObject(i).getJSONObject("item"), clazz));
}
return result;
}
El problema era que los elementos están en la matriz y los elementos son el único elemento. a su vez, los elementos también son una matriz, así que utilicé la dataArrayJSON.getJSONObject(i).getJSONObject("item")
.