Qual é a maneira certa de adicionar interceptores HttpRequest no aplicativo Spring Boot? O que eu quero fazer é registrar solicitações e respostas para cada solicitação http.
A documentação do Spring boot não cobre este tópico. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )
Encontrei alguns exemplos da web sobre como fazer o mesmo com versões anteriores do spring, mas funcionam com applicationcontext.xml. Por favor ajude.
java
spring
spring-mvc
spring-boot
Riship89
fonte
fonte
HandlerInterceptor
sucesso. Está funcionando bem. O único problema é que algunsinternal HandlerInterceptor
lançam uma exceção antes de ser tratada pelocustom HandlerInterceptor
. OafterCompletion()
método que é sobrescrito é chamado depois que o erro é lançado pela implementação interna de HandlerInterceptor. Você tem solução para isso?Respostas:
Já que você está usando Spring Boot, suponho que você prefere confiar na configuração automática do Spring sempre que possível. Para adicionar configuração customizada adicional como seus interceptores, basta fornecer uma configuração ou bean de
WebMvcConfigurerAdapter
.Aqui está um exemplo de uma classe de configuração:
NOTA não anote isso com @EnableWebMvc, se você deseja manter a configuração automática do Spring Boots para mvc .
fonte
The type WebMvcConfigurerAdapter is deprecated
. Estou usando o Spring Web MVC 5.0.6WebMvcConfigurerAdapter
será descontinuado com Spring 5. De seu Javadoc :Conforme declarado acima, o que você deve fazer é implementar
WebMvcConfigurer
e substituir oaddInterceptors
método.fonte
MyCustomInterceptor
Para adicionar interceptor a um aplicativo de inicialização de mola, faça o seguinte
Crie uma classe de interceptor
Defina uma classe de configuração
É isso aí. Agora todas as suas solicitações passarão pela lógica definida no método preHandle () de MyCustomInterceptor.
fonte
getReader() has already been called for this request
erro. Existe alguma maneira mais simples de superar isso sem usar uma cópia da solicitação real?Advice
Como todas as respostas a isso fazem uso do adaptador WebMvcConfigurer abstrato há muito obsoleto em vez do WebMvcInterface (como já observado por @sebdooe), aqui está um exemplo mínimo funcional para um aplicativo SpringBoot (2.1.4) com um Interceptor:
Minimal.java:
MinimalController.java:
Config.java:
MinimalInterceptor.java:
funciona como anunciado
A saída lhe dará algo como:
fonte
Eu tive o mesmo problema de WebMvcConfigurerAdapter sendo preterido. Quando procurei por exemplos, quase não encontrei nenhum código implementado. Aqui está um código de trabalho.
crie uma classe que estende HandlerInterceptorAdapter
em seguida, implemente a interface WebMvcConfigurer
fonte
Você também pode considerar o uso da biblioteca open source SpringSandwich, que permite anotar diretamente em seus controladores Spring Boot quais interceptadores aplicar, da mesma forma que você anota suas rotas de url.
Dessa forma, nenhuma string propensa a erros por aí - o método e as anotações de classe de SpringSandwich sobrevivem facilmente à refatoração e deixam claro o que está sendo aplicado onde. (Divulgação: eu sou o autor).
http://springsandwich.com/
fonte
Abaixo está uma implementação que uso para interceptar cada solicitação HTTP antes de sair e a resposta que volta. Com essa implementação, também tenho um único ponto onde posso passar qualquer valor de cabeçalho com a solicitação.
Abaixo está o bean de modelo de descanso
fonte