RestTemplate-处理自定义错误消息
我有一个Restful API,当找不到某个项时,它会响应404个错误,但根据找不到该项的原因(未知,不可用,…)会有不同的消息,使用Spring MVC是这样做的: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代码中,以便管理
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的实现