¿Es posible determinar de forma selectiva cuándo se utiliza la anotación @JsonFilter en el tiempo de ejecución?@JsonFilter arroja "JsonMappingException: No se puede resolver BeanPropertyFilter"
Recibo la excepción JsonMappingException (ver a continuación) cuando no proporciono el filtro.
Antecedentes:
I aprendido de un recent StackOverflow post que puedo usar @JsonFilter filtrar dinámicamente las propiedades del bean conseguir serializados. Esto funciona genial Después de añadir @JsonFilter("apiFilter")
a mi clase de dominio y con la adición de este código en mi servicio JAX-RS (utilizando la aplicación CXF), soy capaz de filtrar dinámicamente las propiedades devueltas por mi API REST:
// shortened for brevity
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
return mapper.filteredWriter(filters).writeValueAsString(user);
El problema ¿Hay diferentes llamadas de servicio en las que no quiero aplicar el filtro? En esos casos, quiero devolver toda la clase de dominio sin filtrar ninguna propiedad. En el caso en que sólo trato de devolver la clase de dominio que estoy recibiendo una excepción de la siguiente manera:
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)
en su ejemplo editado, ¿tendría que incluir el código para verificar qué método de escritura llamar en cada llamada de servicio jax-rs? en algunos métodos de servicio devuelvo un objeto Usuario real en lugar de una Cadena. ¡Muchas gracias por tu comentario! – Justin
bien, tuve la oportunidad de darle una oportunidad. el "truco" que sugirió funciona pero no pude obtener su segunda sugerencia "limpia" para que funcione. en ese caso, sigo recibiendo el error "no FilterProvider configurado". gracias de nuevo. – Justin
@Justin: bueno, IMO es una solución "impura" que resuelve un problema, es mejor que uno "limpio" que no funciona :). Espero que haya ayudado a resolver tu problema. –