При попытке выполнить частичное обновление компонента ничего не меняется. Данный компонент использует @JsonTypeInfo, особенно с As.EXTERNAL_PROPERTY. При удалении позиции @JsonTypeInfo она корректно обновляется.
Я пробовал это как с настроенным Spring Джексоном, так и в отдельном проекте. У меня есть Git репо с ошибочным кодом. Если я использую As.PROPERTY вместо EXTERNAL_PROPERTY, это тоже работает.
public class VehicleWithJsonTypeInfo {
private String make;
private String model;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "make")
@JsonSubTypes({
@JsonSubTypes.Type(value = Diesel.class, name = "mercedes"),
@JsonSubTypes.Type(value = Petrol.class, name = "toyota")
})
private Fuel fuel;
// ... getters, setters and toString
}
public interface Fuel {
}
public class Petrol implements Fuel {
private boolean leaded;
// ... getters, setters and toString
}
Это работает
ObjectMapper mapper = new ObjectMapper();
String make="toyota";
String model="corolla";
boolean leaded=false;
String json="{\"make\": \""+make+"\", \"model\": \""+model+"\", \"fuel\":{\"leaded\": "+Boolean.toString(leaded)+"} }";
VehicleWithJsonTypeInfo vehicle = mapper.readValue(json, VehicleWithJsonTypeInfo.class);
Это не обновляет компонент
mapper.readerForUpdating(vehicle).readValue("{\"make\": \"ford\"}");