将字段设置为共享值

Set field to a shared value

我有一个 class 看起来像这样:

class Data {
    @JsonCreator
    public Data(@JsonProperty("string") String s, Widget w) {
         string = s;
         widget = w;
    }
    String string;
    Widget widget;
}

我想从JSON反序列化它,比如

{
    "string": "string value"
}

反序列化时,我想将widget设置为共享实例。我在创建对象映射器时有那个实例,但我看不出如何告诉 Jackson 使用这个实例。

我看到 JsonDeserialize.getNullValuegetEmptyValue,但它们看起来像是用来处理的

{
   "string": "string value", "widget": null 
}

这不是我拥有的JSON。

你可以试试 @JacksonInject:

public class Data {

    @JacksonInject
    public Widget widget;

    ...
}   

然后使用如下:

Widget widget = ...

InjectableValues injectable = new InjectableValues.Std().addValue(Widget.class, widget);
Data data = new ObjectMapper().reader(injectable).forType(Data.class).readValue(json);