【问题标题】:RestTemplate - Handle custom error messageRestTemplate - 处理自定义错误消息
【发布时间】:2012-08-03 13:07:57
【问题描述】:

我有 Restful API,它在找不到项目时响应 404 错误,但根据未找到项目的原因(未知、不可用……)有不同的消息,使用 Spring 以这种方式完成MVC:

response.sendError(HttpServletResponse.SC_NOT_FOUND, "NOT_AVAILABLE");

(这适用于任何浏览器,以“NOT_AVAILABLE”作为消息显示 404 错误)

现在,我想使用 Spring RestTemplate 将该消息返回到我的 Java 代码中,以便管理它们。 我试过这个:

try {
    rest.put(apiRootUrl + "/item/{itemId}", null, itemId);
} catch (HttpClientErrorException e) {
    if (NOT_FOUND == e.getStatusCode()) {
        switch (MyErrorCode.valueOf(e.getStatusText())) {
            case NOT_AVAILABLE:
                return displayNotAvailableError();
            case UNKNOWN:
                return displayUnknownError();
            default:
                // ...
        }
    }
}

但在 getStatusText() 中,我总是得到 NOT FOUND 标签(来自 404)而不是我的自定义值。

有人知道是否可以从 404 错误中检索自定义消息吗?那么怎么做呢?

非常感谢!

编辑:我在 Tomcat 服务器(发送 404 HTML 页面)上运行,这不会附加 Weblogic 服务器

【问题讨论】:

  • 我通过分析这样的响应正文找到了解决方法:errorBody.substring(errorBody.indexOf("")+3, errorBody.indexOf("")) ;但它不是很整洁...... :-(
  • Tomcat服务器出现这种情况,Weblogic做对了,所以我认为这来自于tomcat的servlet API的实现

标签: rest error-handling resttemplate


【解决方案1】:

好的,再挖一点,解决方法其实很简单!

Tomcat 将其默认的 404 页面发回给我,我只需要告诉它使用我的页面!

如何做到这一点:

  • 像这样创建一个 404.jsp 页面:

    <%@ page pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <c:out value="${requestScope['javax.servlet.error.message']}"/>
    
  • 在你的 web.xml 中引用它

    <error-page>
        <error-code>404</error-code>
        <location>/error/404.jsp</location>
    </error-page>
    

现在,您可以使用 e.getStatusText() 在客户端中获取消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 2019-11-07
    • 2021-05-04
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多