0

我有 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 服务器

4

1 回答 1

0

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

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

于 2012-08-08T13:09:25.997 回答