Bom dia, pessoal!
Estou com uma dúvida no interceptor do spring.
Acredito ser uma dúvida bem simples, mas não estou conseguindo encontrar a resposta.
Procurei desde ontem aqui e em outros foruns, mas não achei nada específico.
Ainda assim, mesmo depois de tanta procurar, acredito estar perguntando algo que muitos já perguntaram.
Por isso, peço desculpas, caso já estejam cansados ler a mesma coisa.
É uma dúvida básica.
Para mim, um Interceptor serve para fazer algo antes da requisição atingir seu alvo (sinta-se a vontade para me corrigir, caso eu esteja errado).
No meu caso, chamo um controller, mas antes de chegar nesse controle, quero que um interceptor faça algo.
Então meu fluxo é:
Jsp (chamando o Controller) -> Interceptor - > Controller -> volta jsp
O meu problema é que ele chega no Interceptor, faz o que tem que fazer, mas fica por lá. A requisição não passa pelo controller.
Deve ter alguma configuração errada em outro ponto…
Você declarou mvc:annotation-driven?
Se você remover o interceptor, ele acessa o teu controller normalmente?
Será que o método que tu executa no interceptor está terminando? Se tu simplesmente imprimir alguma coisa e retornar true ou super.preHandle, ao invés da lógica atual, ele funciona?
comentei a tag mvc:interceptors e a requisição entrou no Controller normalmente.
O método executado no interceptor é:
@Transactional
public void persist(ValorPeriodo valorPeriodo) {
em.persist(valorPeriodo);
}
Com relação ao retorno, eu não entendi muito bem.
Estou dando extends na HandlerInterceptorAdapter, então sou obrigado a implementar o preHandle retornando boolean.
Pensei em tirar a herança, pra testar o que você sugeriu (retirar o return), mas não saberia como fazer o interceptor saber que era pra executar o método.
Desculpa, mas eu estou recomecando com JAVA depois de muito tempo. hehehe
e é a primeira vez que vejo spring.
A herança tá correta, deveria funcionar. No caso, eu sugeri que, ao invés de tentar persistir a entidade no interceptor, apenas imprimisse uma mensagem qualquer, pra ver se tá funcionando.
Mas deve estar ocorrendo uma exceção que não tá aparecendo nos logs. Configura o log pra nível debug e vê no que dá.
[quote=Kura]Cara.
Não pude responder antes.
Amanhã, quando eu chegar no trabalho, eu testo e posto o restultado.
Quanto ao “log em nível debug”, viajei.
Sou novato mesmo.
Menos de 1 mês mexendo com java =~~
[/quote]
Tranquilo, aliás, suponho que tu já tenha bastante experiência com alguma outra linguagem, pq em 1 mês já tá estudando Spring, tá bem avançado.
Se você usa eclipse, vai ver os logs na aba Console. Imprimir logs demais deixa a aplicação mais lenta, por isso, por padrão normalmente não se imprime todos os logs. Quando eu disse pra você usar o nível debug, é por que aí ele vai imprimir tudo, se tiver algum erro acontecendo, você vai ver.
Existem vários frameworks de log, tem que ver qual sua app usa. Possivelmente é o log4j. Aí, basta você encontrar o arquivo log4j.properties ou log4j.xml no seu projeto e alterar a configuração relativa ao spring para DEBUG.
Valeu, cara. Vou tomar como um elogio. huahuah
Na verdade, eu trabalhei com java durante 1 ano, mas faz tempo e na época eu não tinha nem noção de OO (nem quando saí).
Só que eu sempre gostei de java então mesmo trabalhando com vb3 e 6 (!!!), eu sempre procurei estudar e fazer cursos na caelum e tal.
mas só agora, que mudei de empresa, estou trabalhando com java
Cara!
Não entendi NADA!
Agora está passando pelo interceptor E pelo controller! :shock:
Achei que tinha funcionado pq eu comentei a parte que chama o método pra persistir, mas depois tirei o comentário e tentei… e funcionou! :shock:
quanto ao debug, agora eu entendi. obrigado pela explicação.
Pra esse projeto eu estou usando o IntelliJ pra testar a IDE e estou gostando mto, diga-se de passagem.
acho que é o log4j mesmo pq eu vejo esse nome aí de vez em quando, enquanto está compilando lol.
Porém, eu não estou achando o .properties… não sei se é pq estou usando maven e ele abstrai as configurações… o.O
[quote=Kura]Valeu, cara. Vou tomar como um elogio. huahuah
Na verdade, eu trabalhei com java durante 1 ano, mas faz tempo e na época eu não tinha nem noção de OO (nem quando saí).
Só que eu sempre gostei de java então mesmo trabalhando com vb3 e 6 (!!!), eu sempre procurei estudar e fazer cursos na caelum e tal.
mas só agora, que mudei de empresa, estou trabalhando com java
Cara!
Não entendi NADA!
Agora está passando pelo interceptor E pelo controller! :shock:
Achei que tinha funcionado pq eu comentei a parte que chama o método pra persistir, mas depois tirei o comentário e tentei… e funcionou! :shock:
quanto ao debug, agora eu entendi. obrigado pela explicação.
Pra esse projeto eu estou usando o IntelliJ pra testar a IDE e estou gostando mto, diga-se de passagem.
acho que é o log4j mesmo pq eu vejo esse nome aí de vez em quando, enquanto está compilando lol.
Porém, eu não estou achando o .properties… não sei se é pq estou usando maven e ele abstrai as configurações… o.O
[/quote]
hehe, tava muito estranho isso aí mesmo. As vezes tem que limpar o projeto e coisas do tipo pra tua alteração entrar em vigor. Você tava reiniciando o server antes?
No caso do log, com o maven normalmente se deixa este arquivo no diretório resources (src/main/resources). Mas o projeto funciona normalmente se não tiver este arquivo, você apenas não consegue configurar o log adequadamente. Veja este projeto de exemplo, do Spring:
No diretório src/main/resources tem o log4j.xml. Se você realmente tá usando o log4j (verifique no pom.xml!), basta copiá-lo e adaptar pra tua aplicação.