将字段传递给自定义反序列化器类Jackson

我编写了一个自定义反序列化器,只使用jackson映射必需的字段。 开始。

public class GeneralDeserializer extends JsonDeserializer { @Override public GeneralDomain deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { final JsonNode jsonNode = jp.getCodec().readTree(jp); final Map map = new ObjectMapper().convertValue(jsonNode, Map.class); final String event = "Proxy"; return new GeneralDomain(map.get("id"), event, map.get("name"), map.get("lastLogin")); } @Override public Class handledType() { return GeneralDomain.class; } } 

我也有一个mixin类,可以添加额外的注释。

 @JsonDeserialize(using = GeneralDeserializer.class) public class GeneralDomainMixIn{} 

我以这种方式获取对象,

 ObjectMapper mapper = new ObjectMapper(); mapper.addMixIn(GeneralDomain.class, SimpleRevealPublicEventMixIn.class); String json = "{\"id\": 111, \"name\": David, \"lastLogin\": \"02-10-2016 10:32:00 AM\"}"; GeneralDomain readValue = mapper.readValue(json, GeneralDomain.class); 

这很好用。 但正如您在自定义反序列化器中看到的那样,我很难对事件字段值进行编码。 这将由主类中的其他实例变量传递。 我必须将此字段传递给自定义反序列化器。 那么有没有办法在反序列化器中访问这个变量? 或者还有其他替代方法来实现这一目标吗? 请帮帮我。 谢谢。

终于得到了答案。 感谢菲利普在这个链接 。

我所要做的就是这个。

创建InjectableValues的实例

 private InjectableValues newInjectableValues() { return new InjectableValues.Std() .addValue("event", "proxy") } 

使用此方法在mapper类中设置injectablevalues方法

 GeneralDomain readValue = mapper.setInjectableValues(injectEventType()).readValue(json, GeneralDomain.class); 

在我的deserialize方法中,我必须检索InjectableValues提供的值:

 String event = String.valueOf(ctxt.findInjectableValue("event", null, null));