VRaptor Interceptor

7 respostas
J

Estou com a seguinte duvida possuo as seguintes classes

public class GenericController<T> {
  @Get
  public void formulario() {
  }
}

@Resource
public class ProdutoController extends GenericController<Produto> {

}

Quero saber o seguinte como faco dentro do Intercept para pegar o que esta vindo como parametro detro do GenericController tipo fiz uns teste aqui e consegui pelo metodo que esta sendo Interceptado consegui pegar GenericController agora quero pegar o parametro
Exemplo

@Intercepts
public class AuthorizationInterceptor implements Interceptor {
    public boolean accepts(ResourceMethod method) {
        return true;
    }

    public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance)
            throws InterceptionException {
      //Consigo pegar GenericController
      System.out.println(method.getMethod().getDeclaringClass());
      stack.next(method, resourceInstance);
    }

}

Obrigado !!!
Joao Vitor

7 Respostas

G

Se a classe que contém o generic for uma interface você usa:

Caso for uma classe use:

Lucas_Cavalcanti

é como o garcia falou… mas dentro do interceptor vc vai ter que fazer:

ResourceMethod method = ...

Class<?> clazz = method.getResource().getType();

Class<?> tipoGenerico = (Class<?>) ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];

ou algo do tipo

G

Lucas, eu não tenho certeza se o mirror é um filho da Caelum. Você sabe se essa funcionalidade de descobrir genéricos está implementado já no mirror? Há algum tempo conversei com alguém (Jonas?!) sobre isso, que seria implentado no futuro.

Lucas_Cavalcanti

o mirror é filho de pessoas que são/eram da Caelum sim… Não sei se ele já tem essa funcionalidade… o projeto é open-source, vc pode contribuir :wink:

J

Lucas Cavalcanti:
é como o garcia falou… mas dentro do interceptor vc vai ter que fazer:

ResourceMethod method = ...

Class<?> clazz = method.getResource().getType();

Class<?> tipoGenerico = (Class<?>) ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];

ou algo do tipo

Valeu isso mesmo deu certo…

Obrigado a todos pela ajuda

G

Lucas Cavalcanti:
o mirror é filho de pessoas que são/eram da Caelum sim… Não sei se ele já tem essa funcionalidade… o projeto é open-source, vc pode contribuir :wink:

O interessante antes é saber se o foco do projeto é realmente trabalhar com generics. Até agora não ví nada sobre isso. Vou enviar um email ao pessoal, e quem sabe posso enviar uns códigos… :thumbup:

Falando em opensource, vamos voltar a conversar sobre aquele exception-handler? Ou nas conversas internas do projeto vocês ainda não gostaram da idéia? Tenho o código que já usei em 4 projetos, e é bem útil para tratar os erros quando não estamos afim de um try and catch.

Abs

Lucas_Cavalcanti

vamos sim, manda um email pra lista caelum-vraptor-dev

Criado 24 de março de 2010
Ultima resposta 24 de mar. de 2010
Respostas 7
Participantes 3