Próbuję określić filtr wstępny, który jest powiązany tylko z niektórymi wywołaniami interfejsu API, zgodnie z sugestią, którą proponuje RESTeasy documentation. Oto co mój kod wygląda następująco:Dopasowywanie filtru za pomocą konkretnej metody za pomocą funkcji NameBinding na RESTeasy
Nazwa wiązania:
@NameBinding
public @interface ValidateFoo {}
zasobów:
@Path("/foo/bar")
@Produces(MediaType.APPLICATION_JSON)
public class FooBar {
@GET
@ValidateFoo
public Object doStuff() {
//do stuff
}
@POST
public Object doAnotherStuff() {
//do another stuff
}
}
Filtr:
@ValidateFoo
@Provider
@PreMatching
public class FooValidation implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext reqContext) throws IOException {
//validate stuff
}
}
Problem jest: filtr FooValidation biegnie przed każdego wywołanie metody (np. Przed GET i POST do/foo/bar), nie włączone ly te opatrzone komentarzem z @ValidateFoo
(wydaje mi się, że to błąd). Jeśli usuniemy adnotację @Provider
z filtru, nie zostanie ona uruchomiona przed wywołaniem (zgodnie z oczekiwaniami).
Widzę to zachowanie konsekwentnie, używając WebLogic lub Tomcat. Moje zarządzanie zależnościami odbywa się za pośrednictwem Mavena, a wersja RESTeasy to 3.0-beta-3.
Ktoś doświadcza/doświadcza tego samego zachowania? Widziałem innego użytkownika z podobnym problemem na JBoss forums, bez szczęścia do tej pory.
AKTUALIZACJA: Nadal występuje ten sam problem z RESTeasy 3.0.1-Final.
Dzięki za sugestię. Próbowałem, ale nawet po zmianie filtr wciąż jest wywoływany przed każdym pojedynczym wywołaniem mojej aplikacji, nie tylko te oznaczone adnotacją @ValidateFoo. – Viccari
Ok, teraz udało nam się sprawić, żeby działało. Wygląda na to, że RESTeasy nie lubił adnotacji "@ PreMatching". Postępując zgodnie z sugestią i usuwając adnotację "@ PreMatching", wszystko działało zgodnie z oczekiwaniami. Dzięki! – Viccari
To ma sens, ponieważ '@ PreMatchowanie' oznacza przed odwzorowaniem żądania na zasób RESTEasy, więc w tym momencie RESTEasy nie wie, czy istnieje jakiekolwiek powiązanie nazw. – stackoverflower