{
"query":{
"data":{
"val1":{
"id":123,
"name":"abc"
},
"val2":{
"id":13,
"name":"def"
},
"total":{
"count":2,
"page":{
"num":1
}
}
}
}
}
我的json看起来像上面。 “val1”,val2“是动态的,所以我将它映射到Map.Everything工作正常,直到我得到”总“标签。 由于结构不同,因此映射到对象失败。 如何在解析或解析“total”到另一个对象时跳过“total”标记。
我得到以下异常
Exception in thread "main" java.lang.IllegalArgumentException: Instantiation of [simple type, class jsom.schema.pojo.Definitions] value failed: Unrecognized field "count" (Class jsom.schema.pojo.MainResourceObj), not marked as ignorable
at [Source: java.io.StringReader@5933cca2; line: 4, column: 26] (through reference chain: jsom.schema.pojo.Definitions["definitions"]->jsom.schema.pojo.MainResourceObj["count"])
我更新了我的pojo,如下所示,仍然是整个标记进入Map.which导致异常
HashMap<String, customObject> definitions;
@JsonProperty("total")
Total total;
public class Total {
public Total() {
// TODO Auto-generated constructor stub
}
String count;
Page page;
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
@JsonCreator
public static Total Create(String jsonString) throws JsonParseException,
JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
Total module = null;
module = mapper.readValue(jsonString, Total.class);
return module;
}
}
答案 0 :(得分:1)
我认为您希望在变量声明上方使用@JsonIgnore标记。试试吧!
@JsonIgnore
Total total;
答案 1 :(得分:1)
如果要忽略属性(也称为字段),则应使用@JsonIgnore或@JsonIgnoreProperties注释。
您的代码将成为:
HashMap<String, customObject> definitions;
@JsonProperty("total")
Total total;
或
...
@JsonIgnoreProperties({"total"})
... class ... {
HashMap<String, customObject> definitions;
Total total;
...
使用JsonIgnoreProperties可以在一个地方排除多个属性。