Jaki jest właściwy sposób dodawania przechwytywaczy HttpRequest w aplikacji rozruchu sprężynowego? Chcę rejestrować żądania i odpowiedzi na każde żądanie http.
Dokumentacja Spring Boot w ogóle nie obejmuje tego tematu. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )
Znalazłem kilka przykładów internetowych pokazujących, jak zrobić to samo ze starszymi wersjami Spring, ale te działają z applicationcontext.xml. Proszę pomóż.
java
spring
spring-mvc
spring-boot
riship89
źródło
źródło
HandlerInterceptor
pomyślnie. Działa dobrze. Tylko problem polega na tym, że niektórzyinternal HandlerInterceptor
zgłaszają wyjątek, zanim zostanie on obsłużony przezcustom HandlerInterceptor
.afterCompletion()
Metoda, która jest zastępowana jest nazywany po błędzie jest wyrzucane przez wewnętrzny realizacji HandlerInterceptor. Czy masz na to rozwiązanie?Odpowiedzi:
Ponieważ używasz Spring Boot, zakładam, że wolisz w miarę możliwości polegać na automatycznej konfiguracji Springa. Aby dodać dodatkową konfigurację niestandardową, taką jak przechwytywacze, wystarczy podać konfigurację lub element bean
WebMvcConfigurerAdapter
.Oto przykład klasy config:
UWAGA nie dodawaj adnotacji @EnableWebMvc, jeśli chcesz zachować automatyczną konfigurację Spring Boots dla mvc .
źródło
The type WebMvcConfigurerAdapter is deprecated
. Używam Spring Web MVC 5.0.6WebMvcConfigurerAdapter
zostaną wycofane wraz z Spring 5. Z jego Javadoc :Jak wspomniano powyżej, należy zaimplementować
WebMvcConfigurer
i zastąpićaddInterceptors
metodę.źródło
MyCustomInterceptor
Aby dodać interceptor do aplikacji rozruchu sprężynowego, wykonaj następujące czynności
Utwórz klasę przechwytywacza
Zdefiniuj klasę konfiguracji
Otóż to. Teraz wszystkie twoje żądania będą przechodzić przez logikę zdefiniowaną w metodzie preHandle () MyCustomInterceptor.
źródło
getReader() has already been called for this request
błąd. Czy istnieje prostszy sposób na rozwiązanie tego problemu bez używania kopii rzeczywistego wniosku?Advice
Ponieważ wszystkie odpowiedzi na to wykorzystują od dawna przestarzały abstrakcyjny adapter WebMvcConfigurer zamiast WebMvcInterface (jak już zauważył @sebdooe), oto działający minimalny przykład aplikacji SpringBoot (2.1.4) z przechwytywaczem:
Minimal.java:
MinimalController.java:
Config.java:
MinimalInterceptor.java:
działa jak w reklamie
Wynik da ci coś takiego:
źródło
Miałem ten sam problem z wycofywaniem WebMvcConfigurerAdapter. Kiedy szukałem przykładów, prawie nie znalazłem zaimplementowanego kodu. Oto fragment działającego kodu.
utwórz klasę, która rozszerza HandlerInterceptorAdapter
następnie zaimplementuj interfejs WebMvcConfigurer
źródło
Możesz również rozważyć użycie biblioteki SpringSandwich o otwartym kodzie źródłowym, która umożliwia bezpośrednie dodawanie adnotacji w kontrolerach Spring Boot, które przechwytywacze zastosować, w podobny sposób, w jaki dodajesz adnotacje do tras adresów URL.
W ten sposób nie ma żadnych podatnych na literówki ciągów znaków - metoda SpringSandwich i adnotacje klas z łatwością przetrwają refaktoryzację i wyjaśniają, co jest stosowane i gdzie. (Ujawnienie: jestem autorem).
http://springsandwich.com/
źródło
Poniżej znajduje się implementacja, której używam do przechwytywania każdego żądania HTTP przed jego wysłaniem i odpowiedzią, która wróci. Dzięki tej implementacji mam również pojedynczy punkt, w którym mogę przekazać dowolną wartość nagłówka z żądaniem.
Poniżej znajduje się fasola szablonu Rest
źródło