У меня есть строка ниже Json, и я хочу десериализовать то же самое, используя некоторый инструмент objectMapper, например Jackson. Но это выбрасывает исключение
Unrecognized field "CPREQUESTS" (Class mmt.jacoco.Respon), not marked as ignorable
Использовали множество соглашений об именах в классе 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;
}
}
С GSON это работает, потому что gson использует отражение для получения имени поля, тогда как Джексон использует сеттер / получатель (по умолчанию) для сериализации / десериализации.
Джексон (очевидно) также использует отражение
Спасибо @HemantPatel за вашу помощь. Моя проблема заключалась в том, что в одном файле я использовал Jackson1, а в другом - импорт jackson 2, который вызывает проблему.




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