Skip to content

Instantly share code, notes, and snippets.

@kashyapp
Created March 11, 2013 06:33
Show Gist options
  • Select an option

  • Save kashyapp/5132236 to your computer and use it in GitHub Desktop.

Select an option

Save kashyapp/5132236 to your computer and use it in GitHub Desktop.
Jackson Custom Deserializer - pick up only keys of map and return as list.
@JsonDeserialize(contentUsing = Foo.class)
private static class Permissions extends HashMap<String, List<String>> {
}
private static class Foo extends StdDeserializer<Collection<String>> {
protected Foo() {
super(Collection.class);
}
@Override
public Collection<String> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
switch (jp.getCurrentToken()) {
case START_OBJECT: {
JsonDeserializer<Object> deserializer = ctxt.findRootValueDeserializer(ctxt.constructType(Map.class));
Map<String, Object> map = (Map<String, Object>) deserializer.deserialize(jp, ctxt);
return map.keySet();
}
case START_ARRAY: {
JsonDeserializer<Object> deserializer = ctxt.findRootValueDeserializer(ctxt.constructType(List.class));
List<String> list = (List<String>) deserializer.deserialize(jp, ctxt);
return list;
}
default:
throw ctxt.mappingException("Expected to see an object or array, found " + jp.getCurrentToken());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment