RestTemplate - 处理异常中的响应标头/正文(RestClientException、HttpStatusCodeException)

2024-04-27

在我的 Restful Web 服务中,如果出现错误请求 (5xx) 和 4xx 响应代码,我会在响应中写入自定义标头“x-app-err-id”。

在客户端,我使用 RestTemplate 的交换方法来进行 RestFul Web 服务调用。当响应代码为 2xx 时一切正常。

ResponseEntity<Component> response = restTemplate.exchange(webSvcURL,
    HttpMethod.POST, 
    requestEntity,
    Component.class);

但是,如果由于错误请求(5xx)或 4xx 而出现异常(HttpStatusCodeException),则在 HttpStatusCodeException 的 catch 块中,我得到的响应(见上文)为 null,因此我无权访问我的自定义标头在我的网络服务中设置。如果 RestTemplate 中出现异常,如何从响应中获取自定义标头。

还有一个问题是,我在响应正文中设置了一个错误对象(json),以防出现错误,并且我想知道如何在 RestTemplate 中出现异常时访问响应正文


我最终使用 ResponseErrorHandler 做到了。

public class CustomResponseErrorHandler implements ResponseErrorHandler {

    private static ILogger logger = Logger.getLogger(CustomResponseErrorHandler.class);

    private ResponseErrorHandler errorHandler = new DefaultResponseErrorHandler();

    public void handleError(ClientHttpResponse response) throws IOException {

        List<String> customHeader = response.getHeaders().get("x-app-err-id");

        String svcErrorMessageID = "";
        if (customHeader != null) {
            svcErrorMessageID = customHeader.get(0);                
        }

        try {           

            errorHandler.handleError(response);

        } catch (RestClientException scx) {         

            throw new CustomException(scx.getMessage(), scx, svcErrorMessageID);
        }
    }

    public boolean hasError(ClientHttpResponse response) throws IOException {
        return errorHandler.hasError(response);
    }
}

然后通过如下所示的配置将这个自定义响应处理程序用于 RestTemplate

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
   <property name="messageConverters">
       <list>
           <ref bean="jsonConverter" />
       </list>
   </property>    
   <property name="errorHandler" ref="customErrorHandler" />
</bean>

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
   <property name="supportedMediaTypes" value="application/json" />
</bean>

<bean id="customErrorHandler " class="my.package.CustomResponseErrorHandler">
</bean>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RestTemplate - 处理异常中的响应标头/正文(RestClientException、HttpStatusCodeException) 的相关文章

  • Django:关闭http响应消息的控制台输出

    所以我们用 django 制作了一个应用程序 每次收到请求时它都会在控制台上打印所有这些 http 响应消息 Date String GET urlpath blah blah 200 216 Date String DELETE anot
  • Java 使用带有域和安全的 RestTemplate 设置安全 cookie

    除了下面的问题之外 我如何设置 Cookie 域并标记为 安全 尝试在 Cookie 上设置其他属性 使用 RestTemplate 设置安全 cookie https stackoverflow com questions 5796078
  • Python Scrapy并不总是从网站下载数据

    Scrapy 用于解析 html 页面 我的问题是为什么有时scrapy返回我想要的响应 但有时不返回响应 是我的错吗 这是我的解析函数 class AmazonSpider BaseSpider name amazon allowed d
  • 获取 BLE 设备的响应

    我对使用蓝牙设备还很陌生 到目前为止一切都很完美 但有一个问题我不知道如何处理 我有一个 LED 灯设备 我可以改变一切 从颜色到速度 闪烁 褪色等等 现在我想读取当前的设备状态 例如设备是打开还是关闭 我有一份该设备的文件 上面写着 询问
  • 发送http响应后继续处理php

    我的脚本由服务器调用 从服务器我会收到ID OF MESSAGE and TEXT OF MESSAGE 在我的脚本中 我将处理传入的文本并使用参数生成响应 ANSWER TO ID and RESPONSE MESSAGE 问题是我正在发
  • 无法写入请求:找不到适合请求类型和内容类型的 HttpMessageConverter [application/x-java-serialized-object]

    我正在尝试向第三方服务器发送 xml 请求并期待返回 xml 响应 我在这里附上用于配置 Cnfiguration 网关和通道 自定义 Rest 模板类和要执行的测试客户端的源代码 我们有各种用于 XML Posting 的消息转换器 但尽
  • 由于 MIME 类型不匹配,IE9 脚本响应被阻止

    我使用以下代码片段将 google fusion 表中的数据加载为 json var fileref document createElement script fileref setAttribute type text javascri
  • PHP Curl 异步响应

    我有一个 PHP 文件 它通过curl 调用另一个PHP 文件 我试图让第二个文件向第一个文件发送响应 让它知道它已启动 问题是第一个不能等待第一个完成执行 因为这可能需要一分钟或更长时间 我需要它立即发送响应 然后继续处理常规业务 我尝试
  • 如何更改 OAuth2RestTemplate 中 MappingJacksonHttpMessageConverter 的 MediaType

    我有一个应用程序 它使用 Spring Source OAuth2 作为客户端从资源服务器检索用户数据并创建本地用户 当 OAuth2ClientContextFilter 尝试检索令牌时 我不断收到错误 org springframewo
  • 使用缓存存储 API 保存自定义响应

    我在用着缓存存储 https developer mozilla org en US docs Web API Cache构建渐进式 Web 应用程序 PWA 我需要一个自定义对象put https developer mozilla or
  • 使用 Spring RestTemplate 将查询参数添加到每个 REST 请求

    有没有办法向执行的每个 HTTP 请求添加查询参数RestTemplate在春天 Atlassian API 使用查询参数os authType指定身份验证方法 所以我想附加 os authtype basic对每个请求 而不在我的代码中指
  • C# 对带有换行符的文本字符串进行编码

    我有一个字符串正在写入响应的输出流 保存此文档并在 Notepad 或 WordPad 中打开它后 我会在预期的位置得到格式良好的换行符 但是当我使用常规的旧 Windows 记事本打开此文档时 我会得到一个带有 方形符号 的长文本字符串
  • 活动资​​源响应,如何获取它们

    我有一个活动资源 可以查询数据 它返回记录 计数 无论我要求什么 例如 product Product find 123 响应标头应该包含一个自定义属性 例如 HTTP PRODUCT COUNT 20 我想检查响应 IRB 执行此操作的最
  • Spring RestTemplate 中不存在必需的字符串参数

    我在使用 RestTemplate 发布 2 个参数时遇到问题 a String 多部分文件 我不认为我的控制器有问题 因为它非常基本 看来控制器没有收到名称参数 你能告诉我我的代码有什么问题吗 控制器 收件人 RequestMapping
  • RestTemplate - 处理异常中的响应标头/正文(RestClientException、HttpStatusCodeException)

    在我的 Restful Web 服务中 如果出现错误请求 5xx 和 4xx 响应代码 我会在响应中写入自定义标头 x app err id 在客户端 我使用 RestTemplate 的交换方法来进行 RestFul Web 服务调用 当
  • 在 Angular 中处理多部分响应主体

    我在 Angular 中收到多部分响应正文 但应用程序未正确处理响应 事实证明 Angular 中的 HttpClient 无法正确解析多部分响应主体 请参阅这个问题在 GitHub 上 https github com angular a
  • 在获得响应之前发出多个请求

    当并行发送多个请求时 在获得响应之前 我无法理解 HTTP 的工作原理 有两种情况 1 With Connection Keep Alive 根据HTTP规范 http www w3 org Protocols rfc2616 rfc261
  • 200 响应但未返回 JSON 数据 - Restangular 问题?

    使用 reangular 和存根 hub api 我可以在 Firefox RestClient 上点击此 API 并获取包含所有 JSON 数据的响应正文 但在我的应用程序中 我收到 200 但没有响应正文 内容长度甚至表明存在某些内容
  • 如何告诉 RestTemplate 使用 UTF-8 编码进行 POST?

    我在使用 RestTemplate 发布采用 UTF 8 编码的 JSON 时遇到问题 JSON 的默认编码是 UTF 8 因此媒体类型甚至不应该包含字符集 我尝试将字符集放入 MediaType 但它似乎无论如何都不起作用 My code
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户

随机推荐