почему Gson может сериализовать / десериализовать, но Джексон объектный картограф не работает - PullRequest
0 голосов
/ 04 июня 2018

У меня ниже строки Json, и я хочу десериализовать то же самое с помощью некоторого инструмента objectMapper, например, Джексона.Но это вызывает исключение

Нераспознанное поле "CPREQUESTS" (класс mmt.jacoco.Respon), не помеченное как игнорируемое

Использовали много соглашений об именах в классе Pojo дляименование камер данных.тоже использовал @JsonProperty("CPREQUESTS").Все, что я могу получить, это то, что мне нужно использовать какое-то соглашение об именах при сериализации - десериализацию того же самого, но не в состоянии решить то же самое.

Это нормально работает с Gson, но Джексон терпит неудачу

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());
    }
}

Класс отклика, как показано ниже: -

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 голосов
/ 09 июня 2018

Кажется, у вашего проекта есть две разные версии Джексона.Убедитесь, что вы импортируете для JsonProperty и ObjectMapper из одной и той же библиотеки Jackson, либо из Codehaus (Jackson 1), либо fastxml (Jackson 2)

...