VRaptor 3 + Interceptors

7 respostas
maruero

Boa tarde galera,

Seguinte galera, eu tenho um interceptor que precisa tomar algumas decisões (forwards diferentes) dependendo dos valores dos parâmetros passados para um método de um controller meu, devidamente anotados com @Path e @Get.
Como que eu faço para expor ao Interceptor os parâmetros passados para essa minha lógica?

Obrigado,

Marcelo Dias

7 Respostas

maruero

Acredito que a principal causa de eu não conseguir enxergar no Interceptor os parâmetros passados para o Controller é o fato de meu Interceptor estar interceptando antes do ParametersInstantiatorInterceptor do VRaptor.
No caso eu estou usando uma InterceptorSequence, na qual eu defino a ordem dos meus interceptors. Não devo envolver na sequence Interceptors do Core do VRaptor, néh?!

Lucas_Cavalcanti

olá maruero…

o jeito de fazer isso que vc quer funcionar hoje é sobrescrevendo o RequestExecution.

crie uma classe igual a essa:
https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/core/DefaultRequestExecution.java

anote-a com @Component (além do @PrototypeScoped)

e dê um add no seu interceptor depois do ParametersInstantiatorInterceptor. Seu interceptor deve estar anotado com @Component, e não com @Intercepts.

a gente está implementando uma feature para deixar isso mais fácil:
http://groups.google.com/group/caelum-vraptor-dev/browse_thread/thread/6efa0620d119964a

qdo essa feature entrar no master vc só precisaria anotar seu interceptor com:

@Intercepts(after=ParameterInstantiatorException.class, before=ExecuteMethodInterceptor.class)

se quiser te mando um jar com isso funcionando (snapshot)

maruero

Olá Lucas,

Obrigado pela resposta, e a propósito, quero sim o .jar que você mencionou.

Então, eu fiz uma experiência que aparentemente funcionou.
Eu inclui o ParametersInstantiatorInterceptor em minha InterceptorSequence antes dos meus Interceptors, e dessa forma consegui enxergar os parâmetros através da instância de MethodInfo que eu coloquei nos construtores de meus Interceptors.
Você conhece algum problema em se fazer isso?
Talvez, de alguma forma, o ParametersInstantiatorInterceptor intercepta duas vezes?

Obrigado mais uma vez e até logo.

Lucas_Cavalcanti

se eu não me engano o interceptor vai rodar duas vezes sim… não sei se isso traz algum problema mto grande…

vou gerar o jar então e te passo (não hj :P)

Lucas_Cavalcanti

o jar do vraptor com os interceptors novos…

lembrando que isso é um snapshot e não está estável

maruero

Valew!!!

Lucas_Cavalcanti

se der qqer problema com esse jar, por favor me avise. Como eu disse, ele ainda não está estável

Abraços

Criado 17 de dezembro de 2010
Ultima resposta 21 de dez. de 2010
Respostas 7
Participantes 2