如何将Java异常信息返回给jQuery.ajax REST调用?

Sea*_*abs 6 java ajax jquery

我有一些jQuery代码,它们对Java后端进行REST调用.处理后端函数可能会遇到异常.将此信息备份到Javascript的最佳方法是什么?在测试中,我在Java中捕获了异常,并将HTTP状态代码设置为500.这导致$ .ajax错误处理程序被调用,如预期的那样.错误处理程序的args实际上并不包含任何有用的信息.理想情况下,我想以某种方式将Exception.getMessage()字符串传播回错误处理程序,但不知道如何.


function handleClick() {
    var url = '/backend/test.json';
    $.ajax({
        type: "POST",
        url: url,
        cache: false,
        dataType: "json",
        success: function(data){
            alert("it worked");
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert(jqXHR);
            alert(textStatus); // this comes back as "error"
            alert(errorThrown); // this comes back as "undefined"
        }
    });
}

小智 10

我能够以这种方式将自定义错误消息(java String)发送回基于jQuery的客户端.我认为我的自定义消息可以替换为您想要/需要的异常信息

在控制器中:

public static void handleRuntimeException(Exception ex, HttpServletResponse 
                                          response,String message) {
        logger.error(ex);
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        response.getWriter().write(message);
        response.flushBuffer();
}
Run Code Online (Sandbox Code Playgroud)

在client/javascript中(从错误事件的ajax调用)

displayError:function(jqXHR, textStatus, errorThrown){
   if(jqXHR.responseText !== ''){
        alert(textStatus+": "+jqXHR.responseText);
    }else{
        alert(textStatus+": "+errorThrown);
    }  
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助/


mik*_*obi 4

使用 Servlet 响应对象的sendError方法,该方法允许您设置状态代码和状态文本消息。

文档

示例 编辑

jqXHR参数使您可以访问所有响应信息,包括状态消息

jqXHR.statusText将为您提供传递给该sendError方法的状态消息。

如果您需要的不仅仅是一条短消息,您可以将数据写入响应输出并从jqXHR.responseText或获取该数据jqXHR.responseXML