假設我們有一個如下所示的 JSON 結構:{ "field1": "val1", "field2": "v2", "f3": "v3", "f4": "v4", "arrayOfStuff": [ { "f5": "v5", .... "f10": "v10" } ], "attributes": [ {"att1": "att1"}, {"att2": "attr2"}, {"att3": "att3"} ], "options": [ "ignoreMismatchFile" ]}我們匹配的 java 類看起來像:public class Message { @IsUniqueId private String field1; // private String field2; private String field3; private String field4; private List<AnotherObject> f5; @JsonProperty("attributes") private LinkedHashMap<String, String> attributes; private List<String> options; ....}解析代碼如下所示:protected Message loadSavedMessageAsMessageObject(String path) throws IOException { File file = ResourceUtils.getFile(path); if (file.exists()) { ObjectMapper mapper = this.getObjectMapper(); return mapper.readValue(file, Message.class); } return null;}我們嘗試了不同的方法來實現這一點,最初我們嘗試將屬性設置為private List<MessageAttribute> attributes;但也沒有奏效(我們根據另一個答案切換到地圖- 不起作用)我們的目標是保持屬性是動態的,而不是硬編碼的屬性列表。這就是這個MessageAttribute類的樣子:public class MessageAttribute { private String key; private String value; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; }}我們目前得到的例外是:com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.LinkedHashMap` out of START_OBJECT tokenat [Source: (File); line: 32, column: 3] (through reference chain: com.org.Message["attributes"])
1 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
對應Message于上述 JSON 的 POJO 格式錯誤,我做了一些更改attributes應該是List of Map并且列表AnotherObject應該指向 arrayOfStuff
public class Message {
@IsUniqueId
private String field1; //
private String field2;
private String field3;
private String field4;
private List<AnotherObject> arrayOfStuff; //or you can have List<Map<String,String>> arrayOfStuff
@JsonProperty("attributes")
private List<LinkedHashMap<String, String>> attributes; // this is list of map objects
private List<String> options;
....
}
添加回答
舉報
0/150
提交
取消