Adicionar mensagem de exceção à resposta json

Eu tenho um código que lança um tipo específico de exceção como este:

throw new BadDataException("error message"); 

Esse tipo de exceção é lançado dentro de um método cujo tipo de resposta é json. Eu tenho uma configuração para esse tipo de exceção assim:

     500  

Gostaria de adicionar a mensagem de exceção à resposta do json para mostrá-la ao usuário. Existe alguma maneira de mapear a mensagem de exceção para a resposta quando um código de status 500 é retornado. A chamada do ajax seria algo assim:

 $.ajax( { ... success: function(data, textStatus) { alert('Success'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("Error");//I'd like to add here the reason (exception message) } ... } ); 

Como posso adicionar automaticamente a mensagem desta exceção à resposta HTTP 500? (se for possível)

obrigado

Isto é finalmente como eu fiz isso. Eu adicionei um campo errorMessage à resposta HTTP 500 dessa maneira.

  500 ${exception.message}  

e no pedido do ajax eu recupero a mensagem assim.

 error: function (XMLHttpRequest, textStatus, errorThrown) { var errorMessage = XMLHttpRequest.getResponseHeader('errorMessage'); .... } 

Talvez haja uma maneira mais elegante de fazer isso, mas pelo menos funciona.

Outra opção é criar um tipo de resultado personalizado que configure um status de 500 ISE e retorne uma resposta JSON contendo os dados de erro. Em seguida, apenas mapeie sua exceção para esse tipo de resultado em seu struts.xml (exatamente como você mapeou para o tipo de httpheader no exemplo acima).

Outra opção é criar uma anotação para os methods de ação do Struts que você pretende invocar via AJAX. Em seguida, subclass o ExceptionMappingInterceptor padrão e, se o método de ação estiver anotado como @AjaxRequest (ou o que quer que você o chame), retorne uma resposta JSON padrão que contenha as informações de exceção. Caso contrário, você passará para o comportamento padrão de mapear o resultado para algum tipo de página ou resultado.

Pessoalmente, eu prefiro a última abordagem.