Вы можете создать пользовательский установщик в вашем POJO, используя @JsonProperty
, который выравнивает карту по отдельным полям:
@SuppressWarnings("unchecked")
@JsonProperty("address")
public void setDistrict(Map<String,String> map) {
Map<String,String> address = map.get("address");
this.district = address.get("district");
}
Вы должны сделать это для каждого поля в POJO, которое приходит с карты, чтобы оно могло быть многословным и повторяющимся.
Вы также можете использовать специальный десериализатор, который может заполнять все поля одновременно:
public class SimplePojoDeserializer extends StdDeserializer<SimplePojo> {
@Override
public SimplePojo deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
SimplePojo pojo = new SimplePojo();
product.setAddress(node.get("address").get("address").textValue());
product.setDistrict(node.get("address").get("district").textValue());
// ...
return pojo;
}
}
В этом случае вам нужно будет заполнить все поля в вашем POJO, а не только поля адреса.
Некоторые подробности здесь .