@JsonTypeInfo是否不能与readerForUpdating一起使用?

时间:2019-01-15 09:37:58

标签: jackson

当尝试对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\"}");

0 个答案:

没有答案