How to display the exception message(ex.getMessage()) launched by the server in a jquery ajax?

Asked

Viewed 2,145 times

8

@GET
@Path("boleto/{processo}/{resposta}")
@Produces({ "application/pdf","application/json"})
public Response gerarBoletoDividaAtivaComCaptcha(@PathParam("processo") String numeroProcesso,@PathParam("resposta") String resposta ) throws DetranException {
    if(SimpleCaptcha.validar(request, resposta, true)) {
        try {
            if(true){
                throw new Exception("Erro forcado!");
            }
            StreamingOutput output = geraBoletoPdf();
            return (Response.ok(output).header("content-disposition", "attachment; filename = boleto").build());
        } catch(Exception ex) {
            EDividaAtiva divida = new EDividaAtiva();
            divida.setSucesso(sucesso);
            divida.setMsg(ex.getMessage());
            return (Response.ok(divida).build());
        }

    }else{
        return null;
    }
}




     $.ajax({
                type : 'GET',
                url : URL_APP_CONSULTA_DIVIDA_ATIVA + url,

                statusCode : {
                    //
                    // 500 - Internal Server Error
                    //
                    500 : function(data) {
                        alert('500 - Internal Server Error');
                    },

                    //
                    // 204 - No Content
                    //
                    // Captcha incorreto.
                    //
                    204 : function() {
                        showSimpleCaptcha();
                        showMsg('Captcha incorreto. Tente novamente.');
                    },

                    //
                    // 404 - Page not found
                    //
                    // Serviço indisponivel
                    //
                    404 : function() {
                        showSimpleCaptcha();
                        showMsg('Serviço indisponível no momento. Tenta novamente a alguns minutos.');
                    },

                    // 405 - Method not allowed
                    // Tratamento especifico para servico indisponivel
                    405 : function() {
                        window.location = "Manutencao.html";
                    }
                },

                success : function(dados) {

                    //
                    // Exibe a interface resposta.
                    //
                    createResponseInterface(dados,processo);
                    return;
                }
            });

3 answers

5


Right after Sucess add.

 error: function (xhr, ajaxOptions, thrownError) {
                    var mensagemErro = retornaMensagemErro(xhr);
                    alert(mensagemErro);
                }

It’ll stay that way

success : function(dados) {

                    //
                    // Exibe a interface resposta.
                    //
                    createResponseInterface(dados,processo);
                    return;
                },
error: function (xhr, ajaxOptions, thrownError) {
                        var mensagemErro = retornaMensagemErro(xhr);
                        alert(mensagemErro);
                    }

Also add this Function to your code

function retornaMensagemErro(xhr) {
    var msg = JSON.parse(xhr.responseText);
    return msg.ExceptionMessage;
}
  • Nice Paulohdsousa, that’s what I needed.

2

To display the exception message, I suggest changing the status code to 500 and capturing the property msg of the variable data in jQuery. Moreover, I believe that your method should not cast the exception DetranException. It is best to capture the exception and treat it correctly.

In Java:

@GET
@Path("boleto/{processo}/{resposta}")
@Produces({ "application/pdf","application/json"})
public Response gerarBoletoDividaAtivaComCaptcha(@PathParam("processo") String numeroProcesso,@PathParam("resposta") String resposta ) throws DetranException {
    if(SimpleCaptcha.validar(request, resposta, true)) {
        try {
            if(true){
                // ??
                throw new Exception("Erro forcado!");
            }
            StreamingOutput output = geraBoletoPdf();
            return (Response.ok(output).header("content-disposition", "attachment; filename = boleto").build());
        } catch(Exception ex) {
            // DetranException está sendo capturada aqui,
            // então acredito que você não precisa declarar na assinatura do método
            EDividaAtiva divida = new EDividaAtiva();
            divida.setSucesso(sucesso);
            divida.setMsg(ex.getMessage());

            return Response.serverError().entity(divida).build();
        }

    } else {
        return null;
    }
}

And in javascript:

$.ajax({
    type : 'GET',
    url : URL_APP_CONSULTA_DIVIDA_ATIVA + url,

    statusCode : {
        //
        // 500 - Internal Server Error
        //
        500 : function(data) {
            alert(data.msg);
        },

        // ...
});

2

In addition to the answer given by friend Paulo there is another solution that perhaps few people know about - you can rewrite the global $.ajax method, $.get, $.post using $.ajaxSetup:

$.ajaxSetup({
        cache: true,
        localCache: false,
        cacheTTL: 8760, // 1 ano
        error: function(e, x, settings, exception) {
            console.log(e, 'e');
            console.log(x, 'x');
            console.log(settings, 'settings');
            console.log(exception, 'exception');
            if (e.statusText !== "abort") {
                var message;
                var statusErrorMap = {
                    '400': "O servidor recebeu sua requisição, mas o conteúdo da resposta é inválido.",
                    '401': "Acesso negado.",
                    '403': "Recurso proibido - não pode ser acesso",
                    '404': "Conteúdo não encontrado",
                    '405': "Requisição de troca de domínio não permitido",
                    '500': "Erro interno do servidor.",
                    '503': "Serviço indisponível"
                };
                if (e.status) {
                    message = statusErrorMap[e.status];
                    if (!message) {
                        message = "Erro desconhecido - Cod: " + e.status;
                    }
                } else if (exception === 'parsererror') {
                    message = "Erro. Falha na solicitação de análise JSON.";
                } else if (exception === 'timeout') {
                    message = "Tempo limite esgotado.";
                } else if (exception === 'abort') {
                    message = "Requisição aborteda pelo servidor";
                } else {
                    message = "Erro desconhecido.";
                }
                notify('error', 'Falha de comunicação', message);
            }
        }
    });

Browser other questions tagged

You are not signed in. Login or sign up in order to post.