mam takie zajęcia DTO napisane w Javie:JSON kolekcji generycznych deserializacjia
public class AnswersDto {
private String uuid;
private Set<AnswerDto> answers;
}
public class AnswerDto<T> {
private String uuid;
private AnswerType type;
private T value;
}
class LocationAnswerDto extends AnswerDto<Location> {
}
class JobTitleAnswerDto extends AnswerDto<JobTitle> {
}
public enum AnswerType {
LOCATION,
JOB_TITLE,
}
class Location {
String text;
String placeId;
}
class JobTitle {
String id;
String name;
}
W moim projekcie jest biblioteka Jackson wykorzystywane do serializacji i deserializacji JSONs.
Jak skonfigurować AnswersDto
(stosować specjalne adnotacje) lub AnswerDto
(adnotacji również) zajęcia, aby móc prawidłowo deserializowania wniosek z AnswersDto
w swoim ciele, na przykład:
{
"uuid": "e82544ac-1cc7-4dbb-bd1d-bdbfe33dee73",
"answers": [
{
"uuid": "e82544ac-1cc7-4dbb-bd1d-bdbfe33dee73",
"type": "LOCATION",
"value": {
"text": "Dublin",
"placeId": "121"
}
},
{
"uuid": "e82544ac-1cc7-4dbb-bd1d-bdbfe33dee73",
"type": "JOB_TITLE",
"value": {
"id": "1",
"name": "Developer"
}
}
]
}
Niestety Jackson domyślnie wartości map AnswerDto
obiekt do LinkedHashMap
zamiast obiektu właściwego (Location
lub JobTitle
) typ klasy. Czy mogę napisać niestandardową JsonDeserializer<AnswerDto>
lub konfigurację przy użyciu @JsonTypeInfo
i @JsonSubTypes
może wystarczyć?
Aby prawidłowo deserializowania wniosek z tylko jednym AnswerDto
w postaci
{
"uuid": "e82544ac-1cc7-4dbb-bd1d-bdbfe33dee73",
"type": "LOCATION",
"value": {
"text": "Dublin",
"placeId": "121"
}
}
Używam:
AnswerDto<Location> answerDto = objectMapper.readValue(jsonRequest, new TypeReference<AnswerDto<Location>>() {
});
bez żadnej innej konfiguracji niestandardowej.
Masz kolekcję obiektów aswer ale chcesz deserializowania się tylko jeden obiekt odpowiedź? A co z wykorzystaniem odpowiedzi AnswersDto = objectMapper.readValue (jsonRequest, new TypeReference() {}); –
reos
Chcę zmapować wszystkie obiekty z węzła 'response' do kolekcji' Set '. Kiedy używam 'objectMapper' z tym' TypeReference 'niż niestety własność' value' każdego 'AnswerDto' z kolekcji jest odwzorowana na' LinkedHashMap'. –
Bananan