使用Jersey将变量存储在DeserializationContext中

时间:2017-11-08 04:54:41

标签: java jackson jersey json-deserialization

我有一个MyClass的自定义JSON反序列化器,声明如下:

@JsonDeserialize(using=MyClassDeserializer.class)
public class MyClass {
...

并定义为

 public class MyClassDeserializer extends JsonDeserializer<MyClass> {

    @Override
    public MyClass deserialize(JsonParser jsonParser, DeserializationContext ctxt) {
    ...

然后,我使用Jersey Client对象来调用Web服务并将JSON转换为MyClass的实例:

ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client httpClient = Client.create(clientConfig);

WebResource webResource = httpClient.resource("theUrl");
ClientResponse response = webResource.accept("application/json").type("application/json").get(ClientResponse.class);
...

MyClass myClass = response.getEntity(MyClass.class);

我的问题是:如何在DeserializationContext中存储变量?

我看到Pass a field to custom deserializer class Jackson,但我没有明确创建一个映射器。

1 个答案:

答案 0 :(得分:0)

通过在反序列化方法中添加它来实现此目的:

Long value = (Long) ctxt.findInjectableValue("abc", null, null);

在调用创建客户端之前:

ObjectMapper mapper = new ObjectMapper();
mapper.setInjectableValues(newInjectableValues());
JacksonJaxbJsonProvider jacksonProvider = new JacksonJaxbJsonProvider();
jacksonProvider.setMapper(mapper);
clientConfig.getSingletons().add(jacksonProvider);