为什么Gson能够序列化/反序列化但是jackson objectmapper失败了

时间:2018-06-04 07:33:26

标签: java api jackson gson pojo

我有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;
    }         
}

1 个答案:

答案 0 :(得分:0)

看来你的项目有两个不同版本的jackson。确保JsonPropertyObjectMapper的导入来自同一个jackson lib,来自codehaus(杰克逊1)或更快的xml(杰克逊2)