Можно ли выборочно определить, когда аннотация @JsonFilter будет использоваться во время выполнения?@JsonFilter throws «JsonMappingException: не удается разрешить BeanPropertyFilter»
Я получаю исключение JsonMappingException (см. Ниже), когда я не предоставляю фильтр.
фона:
я узнал от recent StackOverflow post, что я могу использовать @JsonFilter динамически фильтровать свойства фасоли получать сериализации. Это отлично работает. После добавления @JsonFilter("apiFilter")
в мой класс домена и с добавлением этого кода в моей службы JAX-RS (используя реализацию CXF), я могу динамически фильтровать свойства, возвращаемые мой RESTful API:
// shortened for brevity
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
return mapper.filteredWriter(filters).writeValueAsString(user);
Проблема есть ли разные вызовы службы, где я вообще не хочу применять фильтр. В таких случаях я хочу вернуть весь класс домена без фильтрации каких-либо свойств. В том случае, когда я просто пытаюсь вернуть класс домена я получаю исключение следующим образом:
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter'; no FilterProvider configured
at org.codehaus.jackson.map.ser.BeanSerializer.findFilter(BeanSerializer.java:252)
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFieldsFiltered(BeanSerializer.java:216)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:140)
в вашем отредактированном примере, мне нужно будет включить код, чтобы проверить, какой метод записи вызывать в каждом вызове службы jax-rs? в некоторых методах обслуживания я возвращаю фактический объект пользователя, а не строку. Большое спасибо за ваш вклад! – Justin
ОК, у меня был шанс попробовать. «трюк», который вы предлагали, но я не мог заставить ваше второе «более чистое» предложение работать. в этом случае я все еще получаю ошибку «no FilterProvider configuration». еще раз спасибо. – Justin
@ Justin: ну, ИМО «нечистое» обходное решение, которое решает проблему, лучше, чем «чистый», не работающий :). Надеюсь, это помогло решить вашу проблему. –