Я использую Джексона для сериализации / десериализации POJO.Я использую зависимость:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.9.7</version>
</dependency>
У меня есть POJO, который выглядит примерно так:
@JsonIgnoreProperties(ignoreUnknown = true)
class MyPOJO{
private MyPOJO(){
}
@JsonProperty("name")
String name;
@JsonProperty("id")
String id;
........
.........
// getters only (no setters)
}
Я аннотирую свои геттеры с помощью @JsonProperty ("...")снова.
Когда я пишу тестовый код, я могу десериализовать мой POJO все в порядке.Но когда я отправляю запрос через клиент Postman, я получаю следующую ошибку:
Unrecognized field "name" (class MyPOJO), not marked
as ignorable (0 known properties: ])
at [Source: (org.apache.cxf.transport.http.AbstractHTTPDestination$1);
line: 10, column: 14] (through reference chain: SomePOJO1["somename1"]-
>java.util.ArrayList[0]->SomePOJO2["somename2"]->java.util.ArrayList[0]-
>MyPOJO["name"])
Вот мой тестовый код, который прекрасно работает
final String json = "some json string here";
final ObjectMapper mapper = new ObjectMapper();
try {
final MyPOJO pojo= mapper.readValue(json, MyPOJO.class);
System.out.println(pojo.getId());
System.out.println(pojo.getName());
} catch (final Exception e) {
e.printStackTrace();
}
Output : "123"
"abc"
В Codehaus Jackson нет библиотекиclasspath и я импортируем правильные классы из com.fasterxml.jackson
.MyPOJO используется другим POJO из другого модуля в качестве поля элемента (как видно из ошибки).
MyPOJO имеет закрытый конструктор без аргументов, и в полях нет сеттеров.
Что мне здесь не хватает ??
Спасибо!
РЕДАКТИРОВАТЬ
@ XmlElement аннотации (javax.xml.bind.annotation.XmlElement
) являютсятакже не работает над этим классом вместе с аннотациями @JsonProperty.XML также показывает ту же ошибку:
@JsonIgnoreProperties(ignoreUnknown = true)
@XmlType(name = "MyPOJOType", propOrder = {"id", "name"})
class MyPOJO{
private MyPOJO(){
}
@XmlElement(name = "name", required = true)
@JsonProperty("name")
String name;
@XmlElement(name = "id", required = true)
@JsonProperty("id")
String id;
........
.........
// getters only (no setters)
}
При вводе XML в качестве ввода:
Output : JAXBException occurred : cvc-complex-type.2.4.a: Invalid
content was found starting with element 'name'