Fiz um interceptor, mas estou com problemas para saber o resultado do método. Na verdade o retorno do método está sendo sempre null e o método nunca é executado.
public void intercept(InterceptorStack stack, ResourceMethod method, Object instance)
throws InterceptionException {
Object result = info.getResult();
System.out.println(result);
}
Além disso, como faço para esse meu método evitar o redirect para minha view conforme as convenções do path-resolver?
para você ter resultado vc precisa executar o método
stack.next(…);
não entendi bem o que quis dizer na última frase, mas… vc pode alterar o redirect ou outras coisas utilizando o Result, depois de invocar o stack.next
edit:
tente assim
public void intercept(InterceptorStack stack, ResourceMethod method, Object instance)
throws InterceptionException {
stack.next(method, instance); //adiciona isso que vai funcionar
Object result = info.getResult();
System.out.println(result);
}
Estou desenvolvendo um interceptor semelhante do DownloadInterceptor, porém para capturar respostas JsonObject. Fiz baseado no DownloadInterceptor, porém nele não possui esse stack.next.
Além disso, quando meu método retorna qualquer coisa por padrão o resultado do método vai para o JSP. Porém quando você possui um retorno do método como File o resultado apenas é impresso na tela sem ser feito o forward para o JSP. No meu caso não estou conseguindo evitar que o result vá para o JSP.
se você não quiser ser obrigado a colocar result.use(nothing()) no final de toda lógica,
você pode colocar o seu interceptor pra executar depois da execução do método, mas antes de redirecionar pra jsp…
pegue a classe DefaultRequestExecution, copie o fonte dela, e crie uma classe no seu projeto com o mesmo conteúdo…
anote a classe com @Component,
coloque o seu interceptor na stack, logo antes do DownloadInterceptor,
anote seu interceptor com @Component (não @Intercepts)
Lucas, funcionou corretamente. Porém com esse comportamento ele não executa o método accepts(ResourceMethod). Então coloquei aquele hack igual ao do DownloadInterceptor.
Impressionante a forma como é simples sobrescrever as definições padrão do vraptor. :shock:
Compartilho com vocês então esse componente para interceptar requisições json. Copiado e colado do DownloadInterceptor, hehehehe.
[code]@Component @RequestScoped
public class JsonInterceptor
implements Interceptor {
private final HttpServletResponse response;
private final MethodInfo info;