rest - RestTemplate-处理自定义错误消息

标签 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服务器追加

最佳答案

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()在客户端中获取消息

    关于rest - RestTemplate-处理自定义错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796358/

    相关文章:

    arrays - 另一个数组中的数组

    node.js - 如何为 fs.readFileSync() 捕获没有文件?

    ruby-on-rails - 尝试显示时间时出现NoMethodError

    python - 使用 OpenCV (python) 时如何隐藏/禁用 ffmpeg 错误?

    spring - RestTemplate postForObject 返回 HttpClientErrorException : 401 null

    java - 使用 RestTemplate (3.1) 的基本身份验证

    java - 未找到 JAX-RS 的处理程序方法

    api - 以RESTful方式在资源上调用服务器端方法

    java - JAX-RS Access-Control-Allow-Origin header 不存在,但已添加到 ResponseFilter 中

    java - 取消/中止/中断 spring-android resttemplate 请求