我有Json字符串,我想使用像Jackson这样的objectMapper工具反序列化。但它正在抛出异常
无法识别的字段" CPREQUESTS" (类mmt.jacoco.Respon),未标记为可忽略
在Pojo类中使用了许多命名约定来命名数据库。我也使用了@JsonProperty("CPREQUESTS")
。所有我都能得到一个想法是,我必须使用一些命名约定,同时序列化 - 反序列化但不能解决相同的问题。
这对Gson很好,但是jackon失败了
public class APItesting {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
String res = "{\r\n \"CPREQUESTS\": [\r\n {\r\n \"a\": \"b\"\r\n },\r\n "
+ "{\r\n \"a\": \"d\"\r\n }\r\n ],\r\n \"costAmount\": 10488\r\n}";
Gson g = new Gson();
Respon s = g.fromJson(res, Respon.class);
System.out.println(s.getCPREQUESTS().get(0).getA());
System.out.println(s.getCPREQUESTS().get(1).getA());
System.out.println(s.getCostAmount());
System.out.println(s.getCPREQUESTS().size());
ObjectMapper om = new ObjectMapper();
Respon s1 = om.readValue(res, Respon.class);
System.out.println(s1.getCPREQUESTS().size());
}
}
Respon.class如下: -
public class Respon {
private List<CPREQUESTS> CPREQUESTS = null;
@JsonProperty("costAmount")
private Integer costAmount;
@JsonProperty("CPREQUESTS")
public List<CPREQUESTS> getCPREQUESTS() {
return CPREQUESTS;
}
@JsonProperty("CPREQUESTS")
public void setCPREQUESTS(List<CPREQUESTS> cPREQUESTS) {
this.CPREQUESTS = cPREQUESTS;
}
@JsonProperty("costAmount")
public Integer getCostAmount() {
return costAmount;
}
@JsonProperty("costAmount")
public void setCostAmount(Integer costAmount) {
this.costAmount = costAmount;
}
}
答案 0 :(得分:0)
看来你的项目有两个不同版本的jackson。确保JsonProperty
和ObjectMapper
的导入来自同一个jackson lib,来自codehaus(杰克逊1)或更快的xml(杰克逊2)