【问题标题】:How to return Java Exception info to jQuery.ajax REST call?如何将 Java 异常信息返回给 jQuery.ajax REST 调用?
【发布时间】:2011-03-09 21:45:54
【问题描述】:

我有一些对 Java 后端进行 REST 调用的 jQuery 代码。后端函数的处理可能会遇到异常。将此信息备份到 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" } }); }

【问题讨论】:

  • 这与 jquery 或 ajax 无关,而是与您的应用程序后端有关。你在用什么?小服务程序? JSP? Spring-MVC?
  • 作为错误处理程序参数的 jqXHR 对象呢?您不能从那里读取响应的正文或标题吗?

标签: java jquery ajax


【解决方案1】:

我能够通过这种方式将自定义错误消息(java 字符串)发送回基于 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();
}

在客户端/javascript 中(在错误事件中从 ajax 调用)

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

希望这会有所帮助/

【讨论】:

  • 正如@mikerobi 所指出的,我认为sendErrorsetStatus 更合适。我相信sendError 执行的一些额外的幕后操作setStatus 没有这样做。
【解决方案2】:

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

Documentation

Example 编辑

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

jqXHR.statusText 会给你传递给sendError 方法的状态消息。

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

【讨论】:

  • 这是一个很好的建议,也是我考虑过的。唯一的问题是错误字符串似乎根本没有发送到 jQuery 错误处理程序。这就是我想要实现的。
  • @user411180,它就在那里,你没有找对地方。希望我的编辑能够解决问题。
  • If you need more than a short message... 为什么?如果sendError 的第二个字符串参数太大,会不会出错?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多