Skip to content

Instantly share code, notes, and snippets.

@tomykaira
Created December 9, 2014 11:35
Show Gist options
  • Save tomykaira/34fa91f8f6b9c46e25cb to your computer and use it in GitHub Desktop.
Save tomykaira/34fa91f8f6b9c46e25cb to your computer and use it in GitHub Desktop.
Custom deserializer example in Jackson
class Bean {
@JsonDeserialize(using=RrDeserializer.class)
public final Object rr;
public static class RrDeserializer extends JsonDeserializer<Object> implements ResolvableDeserializer {
JsonDeserializer<Object> sampleRefResponseDeserializer;
@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonToken token = jp.getCurrentToken();
switch (token) {
case FIELD_NAME:
case START_OBJECT:
return sampleRefResponseDeserializer.deserialize(jp, ctxt);
case VALUE_NUMBER_INT:
return jp.getNumberValue().longValue(); // should be optimal, whatever it is
default:
throw ctxt.mappingException(Object.class, token);
}
}
@Override
public void resolve(DeserializationContext ctxt) throws JsonMappingException {
sampleRefResponseDeserializer =
ctxt.findRootValueDeserializer(ctxt.getTypeFactory().constructType(SampleRefResponse.class));
}
}
@JsonCreator
public Bean(
@JsonProperty("rr") Object rr) {
this.rr = rr;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment