当尝试对Bean进行部分更新时,没有任何改变。有问题的Bean使用@JsonTypeInfo,特别是与As.EXTERNAL_PROPERTY。删除@JsonTypeInfo姿势时,它会正确更新。
我已经在Spring配置的Jackson以及一个单独的项目中尝试过。我有一个Git repo带有失败的代码。如果我使用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);
这不会更新bean
mapper.readerForUpdating(vehicle).readValue("{\"make\": \"ford\"}");