假设我们有一个如下所示的 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
提交
取消