我有一个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,但我没有明确创建一个映射器。
答案 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);