Дженерик и проблема с рекурсией и десериализацией
У меня есть две DTO
public class PersonDto {
private Integer id;
private String name;
List<PersonDto> childs;
}
и
public class PersonFullDto extends PersonDto {
private String parentPhone;
}
Хочу что бы когда в метод поступает строка содержащая json, то можно было проверить есть ли там значения parentPhone
?
Если есть, то возвращать PersonFullDto
иначе PersonDto
используя для чтения com.fasterxml.jackson.databind.ObjectMapper
Что-то вроде этого:
T result;
if (json.contains("parentPhone")){
result = objectMapper.readValue(json, PersonFullDto.class);
log.info(result.toString());
} else {
result = objectMapper.readValue(json, PersonDto.class);
log.info(result.toString());
}
Пробовал использовать Bounded Type Parameter
,
public class PersonDto<T extends PersonDto> {
private Integer id;
private String name;
List<T> childs;
}
Но из-за наличия поля childs
типа PersonDto
или PersonFullDto
возникала рекурсия, проблемы с которой я не смог решить
А если сделать вот так
public class PersonDto {
private Integer id;
private String name;
List<? extends PersonDto> childs;
}
то ObjectMapper
ломается и даже как написать Custom Deserializer
для такого случая не нашёл
Вот полный код для теста: https://github.com/AlexeyOs/GenericProblem