Ben ettik böyle DTO sınıfları: ProjemdeJSON jenerik toplama deserialization
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;
}
serileştirme ve JSONs ait seri kaldırma için kullanılan Jackson kütüphane bulunmaktadır.
düzgün örneğin kendi vücudunda AnswersDto
ile isteği serisini mümkün olduğu AnswersDto
(özel ek açıklamaları kullanın) veya AnswerDto
(ek açıklama yanı) sınıfları nasıl yapılandırılır:
{
"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"
}
}
]
}
Maalesef Jackson varsayılan haritaları değeriyle AnswerDto
nesnesinin (Location
veya JobTitle
) sınıf nesnesi yerine LinkedHashMap
nesnesine nesne. Özel JsonDeserializer<AnswerDto>
veya @JsonTypeInfo
ve @JsonSubTypes
kullanımı ile yapılandırma yazabilir miyim?
düzgün kullanıyorum
{
"uuid": "e82544ac-1cc7-4dbb-bd1d-bdbfe33dee73",
"type": "LOCATION",
"value": {
"text": "Dublin",
"placeId": "121"
}
}
şeklinde sadece bir AnswerDto
ile isteği serisini için:
AnswerDto<Location> answerDto = objectMapper.readValue(jsonRequest, new TypeReference<AnswerDto<Location>>() {
});
diğer tüm özel yapılandırma olmadan.
Sen aswer nesnelerinin bir koleksiyonu var ama tek bir cevap nesnesine serisini istiyor? AnswersDto yanıtlarını kullanma = objectMapper.readValue (jsonRequest, new TypeReference() {}); –
reos
Tüm cevapları 'cevaplar düğümden 'Set' koleksiyonuna eşlemek istiyorum. 'objectReference ' ile 'objectMapper' kullanıldığında, koleksiyondaki her' AnswerDto'nun 'value' özelliği maalesef' LinkedHashMap' ile eşleştirilir. –
Bananan