support nested property filters
See original GitHub issueProblem: If there is a class say Person
class Person {
string name;
int age;
Address address;
.. getters and setters
}
How do we dynamically filter specific nested properties: name, address.state, address.zipcode reusing the same object mapper/writer.
One way is to follow the Spring integration to use property filter https://jira.spring.io/browse/SPR-12586. However, nested property filters are not supported. This is because of the way Jackson integration works. This is a very common use case to get only the fields clients are interested in runtime.
There are a few implementations already available that are slow because they lookup the jgen root context to build the nested path every time a property is checked if it can be filtered. These implementations also won’t work without explicitly adding JsonFilter annotation on all classes that will be filtered: https://github.com/PressAssociation/partial-response/tree/master/filter-json-jackson https://github.com/Antibrumm/jackson-antpathfilter https://github.com/narusas/SpringMvcJacksonFilter
The following won’t work without @JsonFilter(“antPathFilter”) on all classes
objectMapper.addMixIn(Object.class, AntPathFilterMixin.class);
filter = new SimpleFilterProvider()
.addFilter("antPathFilter",
new AntPathPropertyFilter("nestedObj", "nestedObj.nestedProperty")
jacksonValue.setFilters(filter);
One work around is to explicitly set the same @JsonFilter(“antPathFilter”) on all classes that are nested, which did not make any sense to me. What if I wanted to support multiple filters at the same time tomorrow?
I also ended up writing my own implementation that is fast and that uses SimplePropertyFilter per class built on the nested properties.
The problem really is the way Jackson APIs requests a filter for current property without any context on the current class owning that property.
Issue Analytics
- State:
- Created 8 years ago
- Comments:5 (1 by maintainers)
Top GitHub Comments
It has been a long time since this above question has raised. Any update on support of nested object property filters using Jackson @JsonFilter. @cowtowncoder
https://github.com/FasterXML/jackson-databind/issues/1040