RestTemplate - 处理自定义错误消息

时间:2012-08-03 13:07:57

标签: rest error-handling resttemplate

我有Restful API,当找不到某个项目时会响应404错误,但根据找不到该项目的原因(未知,不可用,......)有不同的消息,这是使用Spring这样做的MVC:

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

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

现在,我想使用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服务器上

1 个答案:

答案 0 :(得分:0)

好的,经过多挖掘后,解决方案实际上非常简单!

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()

在您的客户端收到消息