Czy można selektywnie określić, kiedy adnotacja @JsonFilter zostanie użyta w czasie wykonywania?@JsonFilter rzuca "JsonMappingException: nie można rozwiązać BeanPropertyFilter"
Otrzymuję wyjątek JsonMappingException (patrz poniżej), gdy nie zapewniam filtru.
Tło:
dowiedziałem od recent StackOverflow post że mogę wykorzystać @JsonFilter dynamiczne filtrowanie właściwości fasoli coraz odcinkach. Działa to świetnie. Po dodaniu @JsonFilter("apiFilter")
do mojej klasy domeny i po dodaniu tego kodu w mojej służbie JAX-RS (używając realizację CXF), jestem w stanie dynamicznie filtrować właściwości zwróconych przez moją relaksującego API:
// shortened for brevity
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
return mapper.filteredWriter(filters).writeValueAsString(user);
Problem czy są różne połączenia serwisowe, w których nie chcę w ogóle stosować filtra. W takich przypadkach chcę zwrócić całą klasę domeny bez filtrowania żadnych właściwości. W przypadku, gdy po prostu spróbować, aby powrócić do klasy domeny Dostaję wyjątek w następujący sposób:
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)
w twoim edytowanym przykładzie, czy powinienem dołączyć kod, aby sprawdzić, która metoda wywołująca zapisywana jest w każdym wywołaniu usługi jax-rs? w niektórych metodach obsługi zwracam rzeczywisty obiekt użytkownika, a nie ciąg. wielkie dzięki za twój wkład! – Justin
OK, miałem okazję spróbować. "sztuczka", którą zasugerowałeś, działa, ale nie mogłem wykonać drugiej "czystej" sugestii do działania. w takim przypadku nadal otrzymuję błąd "brak FilterProvider skonfigurowany". dzięki jeszcze raz. – Justin
@Justin: Cóż, IMO "nieczystym" rozwiązaniem, które rozwiązuje problem jest lepszy niż "czysty", który nie działa :). Mam nadzieję, że pomogło to rozwiązać twój problem. –