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

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

我有一些jQuery代码,可以对Java后端进行REST调用。后端函数的处理可能会遇到异常。将这些信息备份到Javascript的最佳方法是什么?在一次测试中,我捕获了Java中的异常,并将HTTP状态代码设置为500。这导致按预期调用$.ajax错误处理程序。错误处理程序的参数实际上不包含任何有用的信息。理想情况下,我希望以某种方式将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"
        }
    });
}

使用servlet响应对象的
sendError
方法,可以设置状态代码和状态文本消息

编辑

该参数允许您访问所有响应信息,包括状态消息

jqXHR.statusText
将向您提供传递到
sendError
方法的状态消息


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

通过这种方式,我可以将自定义错误消息(java字符串)发送回基于jQuery的客户端。我认为我的自定义消息可以替换为您想要/需要的异常信息

在控制器中: 在client/javascript中(错误事件时从ajax调用)
希望这有帮助/

这与jquery或ajax无关,但与您的应用程序后端有关。你在用什么?服务员?JSP?SpringMVC?作为错误处理程序的参数得到的jqXHR对象呢?你不能从那里读一下回复的主体或者标题吗?这是一个很好的建议,也是我考虑过的。唯一的问题是错误字符串似乎根本没有发送到jQuery错误处理程序。这就是我想要实现的。@user411180,它就在那里,你看得不对。希望我的编辑能把事情弄清楚。
如果你需要的不仅仅是一条短信…
为什么?如果
sendError
的第二个字符串参数太大,是否会出错?正如@mikerobi所指出的,我认为
sendError
setStatus
更合适。我相信
sendError
还执行了一些
setStatus
无法执行的其他幕后操作。
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();
}
displayError:function(jqXHR, textStatus, errorThrown){
   if(jqXHR.responseText !== ''){
        alert(textStatus+": "+jqXHR.responseText);
    }else{
        alert(textStatus+": "+errorThrown);
    }  
}