RestTemplate-处理自定义错误消息

RestTemplate-处理自定义错误消息,rest,error-handling,resttemplate,Rest,Error Handling,Resttemplate,我有一个Restful API,当找不到某个项时,它会响应404个错误,但根据找不到该项的原因(未知,不可用,…)会有不同的消息,使用Spring MVC是这样做的: response.sendError(HttpServletResponse.SC_NOT_FOUND, "NOT_AVAILABLE"); (这适用于任何浏览器,显示404个错误,并以“NOT_AVAILABLE”(不可用)作为消息) 现在,我想使用SpringRESTTemplate将该消息返回到我的Java代码中,以便管理

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

response.sendError(HttpServletResponse.SC_NOT_FOUND, "NOT_AVAILABLE");
(这适用于任何浏览器,显示404个错误,并以“NOT_AVAILABLE”(不可用)作为消息)

现在,我想使用SpringRESTTemplate将该消息返回到我的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()
中,我总是得到未找到的标签(来自404),而不是我的自定义值

有人知道是否可以从404错误中检索自定义消息吗?因此如何

非常感谢


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

好的,在进一步挖掘之后,解决方案实际上非常简单

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>
    
    
    404
    /错误/404.jsp
    

现在,您可以使用
e.getStatusText()

在客户机中获取消息,我通过分析响应体找到了一种方法,如下所示:errorBody.substring(errorBody.indexOf(“”+3,errorBody.indexOf(“”));但它不是很整洁…:-(这是在Tomcat服务器上发生的,Weblogic用正确的方式来做,所以我认为这来自于Tomcat的servlet API的实现