Лучший способ, который я нашел, чтобы решить мою проблему надлежащим образом, это использовать аннотацию @JsonCreator с @JsonProperty.Тогда код будет выглядеть так:
final class PersonDto {
private final String name; // name
private final String city; // address.city
public PersonDto(String name, String city) {
this.name = name;
this.city = city;
}
@JsonCreator
public PersonDto(@JsonProperty("name") String name, @JsonProperty("address") Map<String, Object> address) {
this(name, address.get("city"))
}
}
Конечно, это лучший способ, если десериализовать просто простой POJO.Если у вас логика десериализации более сложная, лучше реализовать собственный настраиваемый десериализатор.