我有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服务器上
答案 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()