Czy naprawdę myśli sprawdzania zasobów członkowie? Zwykle członkowie zasobów są wstrzykiwani w ten lub inny sposób (to albo konteksty, encje, albo parametry ścieżki/zapytania/macierzy), o ile struktura JAX-RS działa, a otrzymasz te elementy prawidłowo wstrzyknięte.
Osobiście uważam, że bardziej sensowne jest walidowanie istoty, odkąd przybył przez przewód, wypełniony przez MessageBodyReader i zasadniczo nie masz pojęcia, co jest w środku, prawda?
Więc jeśli zdecydujesz się potwierdzić podmioty, istnieje kilka sposobów, które można podjąć:
AFAIK, Apache Wink nie obsługuje wbudowanych walidacji. Możesz zaimplementować moduł obsługi. Zobacz DeploymentConfiguration.initRequestHandlersChain()
. Obsługuje dodawanie programów obsługi użytkownika. W twoim treserze możesz wykonać wszelkie walidacje. Myślę nawet, że społeczność Wink będzie zadowolona, jeśli wesprzesz ten kod.
Jedyny problem z tym podejściem - jest związany z interfejsem Apache Wink. Nie zadziała, jeśli zdecydujesz się na przejście do innej struktury JAX-RS.
Innym podejściem jest dokonanie tej walidacji we własnym MessageBodyReader
. Wszystko, co musisz zrobić, to zarejestrować specjalny czytnik dla swoich jednostek i potwierdzić istnienie w środku. Nadal możesz korzystać ze standardowych funkcji MessageBodyReaders (takich jak JAXB lub Jackson), używając @Context Providers.getMessageBodyReader()
. Dobrą częścią tego podejścia jest to, że jest to standard JAX-RS. Złe, że używasz MessageBodyReaders do czegoś, do czego nie były przeznaczone.
Najprostszym sposobem jest sprawdzenie jednostki w pierwszym wierszu każdej metody zasobów. Stworzy to trochę powielania kodu, ale czasami wygrywa prostota.
Aktualizacja - myślę, że odpowiada to odpowiedzi @ Tarlog # 3. – Brabster
Właściwie pomyślałem, żeby umieścić go na 4 pozycji, ale potem zdecydowałem się go opuścić. Problem z tym podejściem, że klasa opakowania może nie mieć adnotacji z klasy zasobów. To naprawdę zależy od sposobu wdrożenia. – Tarlog