Tratamento de Exception VRaptor 4

Olá pessoal, seguinte… vou explicar o caso e o que pretendo, depois faço as perguntas:

Estou trabalhando numa aplicação web com VRaptor 4 e gostaria de toda vez que um erro ocorrer eu informar o usuário disso… mas gostaria de fazer isso de uma forma mais simples, sem precisar criar muitas classes de exceções e fazer muita loucura na programação… minha idéia era algo como criar um classe de erro minha, e todos os erros que essa classe “levantar” eu gostaria de mostrar na tela para o usuário, pois já estariam bem explicados e em português… gostaria também que algum erro que eu não tratar explicitamente, tipo um NullPointerException, IllegalArgumentException, eu iria capturar e alterar a mensagem que vai para o usuário tipo algo como “Erro de parametro inválido” (para IllegalArgumentException, por ex)… e demais erros os quais eu não quero explicar ou que eu nem imagine que exista ( kkkkkk ), mas que pode acontecer, gostaria de mostrar uma mensagem padrão tipo “Erro interno do servidor”…

esses erros seriam todos logados “por baixo” e quem sabe disparado email, ou algum outro tipo de notificação ao administrador…

já tentei fazer isso na verdade, criei um interceptor, no ACCEPT retorno true… no CATCH do INTERCEPT eu pego a exceção, verifico o tipo (MinhaException, NullPointerException, IllegalArgumentException, outras) e de acordo com isso subo um JSON para a View e gravo parte do StackTrace na base e/ou envio um email… até ai tudo bem, a não ser pelo fato de que nem todas as exceptions são capturadas por esse interceptor… já tentei colocar ele como como “before” aos outros, mas exceções geradas por exemplo nas JSPs, quando um atributo de um objeto não existe por exemplo, ele mostra a pagina de erro padrão do status 500…

obs: na view tenho um javascript que verifica se é um HTTP 500, pega o JSON e exibe formatado na tela…

perguntas:

  1. como eu faria para capturar todos os erros (inclusive esses da JSP)?
  2. como manter o http 500 e retornar o JSON com a descrição do erro?
  3. está muito errado esse meu tratamento? ou apenas “diferente” (kkkk)?
  4. como seria o certo nunca caso desses? ou não há certo ou errado nesse caso?

OBS: gosto de saber como as coisas funcionam por dentro, se puderem me detalhar…

agradeço a atenção

Existe um plugin pro VRaptor 4 que serve para mandar os erros ao administrador, acredito que você consegue extendê-lo para que você mostre a mensagem adequada a cada situação.

https://github.com/caelum/vraptor-error-control