Spring RestTemplate:如何达到状态来检查 #is4xxClientError,而不是第一个 RestClientException?

2024-01-24

根据我的经验,在致电 Spring 之后RestTemplate#exchange随后收到“404 - Not Found”响应,RestClientException被抛出而不是返回ResponseEntity可以检查其状态(即:ResponseEntity#getStatusCode#is4xxClientError).

我不明白为什么HttpStatus#is4xxClientError即使存在,如果相反Exception被抛出,阻止返回ResponseEntity with HttpStatus打电话#is4xxClientError on...

我有理由相信我刚才描述的是实际情况,因为我可以在互联网上找到其他帐户来证实这一点(即:Spring MVC - 当 http 404 发生时 RestTemplate 启动异常 https://stackoverflow.com/questions/16194014/spring-mvc-resttemplate-launch-exception-when-http-404-happens/).

如何使用 Java 代码进入状态RestTemplate我确实可以在哪里检查ResponseEntity#getStatusCode#is4xxClientError when RestTemplate#exchange收到404,而不是被阻止RestClientException?是不是有什么关系RestTemplate配置?

或者我是否正确,这实际上是不可能的,也许存在ResponseEntity#getStatusCode#is4xxClientError实际上是一个“错误”吗?


休息模板有一个方法

public void setErrorHandler(ResponseErrorHandler errorHandler);

And 响应错误处理程序界面看起来像这样。

public interface ResponseErrorHandler {

    boolean hasError(ClientHttpResponse response) throws IOException;

    void handleError(ClientHttpResponse response) throws IOException;
}

每当休息模板处理响应,它首先调用ResponseErrorHandler#hasError(),如果返回 true,ResponseErrorHandler#handleError()被调用可能会抛出异常。

如果你不设置ResponseErrorHandler#setErrorHandler(),默认为DefaultResponseErrorHandler.java https://github.com/spring-projects/spring-framework/blob/master/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java.
默认实现将 4xx / 5xx 系列状态代码视为错误并抛出 RestClientException(不是此异常,而是此异常的子类)。

你总是可以写自己的响应错误处理程序并覆盖默认行为。这样你就可以得到一个响应实体对象,即使在 4xx / 5xx 的情况下(通过编写您自己的实现ResponseErrorHandler并总是回来false从方法hasError()).

一旦你有ResponseEntity对象,您可以使用ResponseEntity#getStatusCode()#is4xxClientError()方法达到同样的目的。

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

Spring RestTemplate:如何达到状态来检查 #is4xxClientError,而不是第一个 RestClientException? 的相关文章

  • SharePoint 2010 Web 服务上的 Java JBoss 401 错误

    我的代码在 Eclipse IDE 中测试时运行成功 我正在使用生成的 Copy wsdl 通过 Web 服务连接到 MS SharePoint 2010 当我在 JBoss 服务器上部署代码 运行 Adob e LifeCycle 时 我
  • 为什么用java日历解析时会得到错误的月份

    Date fakeDate sdf parse 15 07 2013 11 00 AM Calendar calendar Calendar getInstance calendar setTime fakeDate int current
  • Google API - 重定向 URI 不匹配错误

    我正在我的网络应用程序上实现 google 登录 我通过参考this尝试过link https developers google com web signin server side flow 我的 google 登录按钮如下 div s
  • 带有 Spring RequestMapping 路径参数的编码斜杠 (%2F) 给出 HTTP 400

    这不是重复的参考问题 https stackoverflow com questions 3235219 因为它是 Spring 特有的 无论谁添加了这个 事实发生三年后 都没有费心去阅读问题或评论线程来看看真正的答案是什么 接受的答案并不
  • 在 Java 中将字符串复制到文件的开头

    我想将一个字符串写入文件的开头 我该怎么做 我根本不知道如何添加字符串 这就是我到目前为止所做的 public static void prepend String filename String data throws IOExcepti
  • Netbeans 雷达插件配置

    我使用的是 Netbeans 8 0 1 在提交到 SVN 之前 我需要从 IDE 运行并检查 SonarQube 分析 我已经安装了 Netbeans Radar 插件 用于启动本地分析并检查结果 这个插件有一个名为 Get Issues
  • Runtime.getRuntime().exec(cmd) 挂起

    我正在执行一个命令 该命令返回文件的修订号 文件名 但如果执行命令时出现问题 应用程序就会挂起 我可以做什么来避免这种情况 请在下面找到我的代码 String cmd cmd C si viewhistory fields revision
  • Spring MVC:@ResponseBody 中的重定向

    我想在 spring mvc 方法中重定向到另一个 jsp 我不想使用像 window location replace url 这样的 JavaScript 方法 我的方法 RequestMapping value loginUser m
  • 如何在 WebSphere Liberty Batch 中配置事务超时?

    的作用是什么javax transaction global timeout 我是否需要实施检查点 超时 中的方法检查点算法 服务器配置级别有什么东西吗 它如何与应用程序级别的设置进行交互 2016年12月2日编辑 重新设计并解释了为应用程
  • Jetty 提供静态内容所需的最少文件集?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 异步不适用于控制器的抽象超类方法

    我有一个BaseRestControllerRest 控制器扩展的类 它有一个我想异步运行的方法 public abstract class BaseRestController Async someThreadPoolTaskExecut
  • Apache Camel - 路由中的事务

    我有一个关于 Apache Camel 的一般性问题 我无法找到聚合器是否已进行交易 如果是交易 交易是如何实现的 聚合的速度有多快 将消息发送到聚合器可以在事务中运行 您需要一个带有聚合器的持久存储来让传出消息充当事务 请参阅有关持久性的
  • 为什么我在 Java 中收到有关“可能丢失精度”的警告?

    class Test public static void main String args short s 2 s1 200 s2 s2 s s1 error possible loss of precision System out p
  • GSSAPI 中的 javax.naming.AuthenticationException

    我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定 我收到此错误 javax naming AuthenticationException GSSAPI 根异常是 javax security sasl SaslException
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • Java Media API:java media api 下载

    我在哪里可以找到javax media jar 文件 在sun站点它下载一个安装程序 有没有可用的java媒体jar 没有 javax media 具体是 jar 文件 该包位于 jmf jar 文件中 您需要运行安装程序并取出 jar 或
  • 确保 MAVEN_HOME 设置正确

    这里是 Java 和 Maven 菜鸟 使用 OSX 10 8 并使用 HomeBrew 安装 Maven 1 如果我说which mvn我会得到这个 usr local bin mvn 2 如果我说echo MAVEN HOME我不会得到
  • 如何读取FTL文件中的JSONArray?

    我在我的 Java 文件中硬编码了以下 JSON 对象 JSONObject notificationInfoJson new JSONObject notificationInfoJson put title Payment Receiv

随机推荐