当前位置: 首页 > 知识库问答 >
问题:

Spring Webclient:当http状态代码为200时,如何使主体处于错误状态

訾稳
2023-03-14

我使用Spring中的webClient从GraphQL WebService中获取数据。此代码位于一个泛型方法中,该方法将响应体解码为不同类型的对象。如果响应是预期的类型,则它运行良好。

webClient()
    .post()
    .bodyValue(graphQLQuery)
    .retrieve()
    .bodyToMono(classType);

现在我想处理来自WebService的错误。因此,我的问题与此非常相似:Spring Webflux:Webclient:Get body on error我发现建议使用onStatus,但我的问题是,即使respons body是错误(请参见下面的示例),http状态代码是200。有没有一种方法可以处理不依赖于http状态代码的错误,比如onStatus?

{
  "errors": [
    {
      "message": "Cannot query field \"something\" on type \"Query\".",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "extensions": {
        "code": "FIELDS_ON_CORRECT_TYPE",
        "codes": [
          "FIELDS_ON_CORRECT_TYPE"
        ],
        "number": "5.3.1"
      }
    }
  ]
}

共有1个答案

赵宏达
2023-03-14

您可以简单地使用FlatMap并在发现错误时传播错误信号:

return webClient
    .post()
    .bodyValue(graphQLQuery)
    .retrieve()
    .bodyToMono(classType)
    .flatMap(response ->
          response.getErrors() != null && !response.getErrors().isEmpty() ?
              Mono.error(new MyException("Errors found...")) :
              Mono.just(response)
     );
 类似资料:
  • 我这样做是为了尝试我的UserRestController,但我在响应中什么也没有得到,还有一个200状态码。 我尝试了很多方法,但都没有找到答案。。。 这是我用来测试分类控制器的代码 当我运行单元测试时,会得到以下响应:

  • 我希望为每个状态代码显示不同的错误消息,例如: < li>400错误请求 < li>403禁止 < li>500内部服务器错误 < li>404未找到 < li>401未授权 如何在新的ASP。NETMVC6应用程序?我可以使用内置的UseErrorHandler方法执行此操作吗? 另外,我注意到,即使使用上述处理程序,输入不存在的URL(例如/this-page-不存在)也会导致来自IIS的丑陋

  • TLDR;如何使用Spring在正文中发送文本消息以及304状态代码? 背景 我正在使用Spring Boot编写一个REST API。在某些endpoint中,我想返回: 任一状态 ,身体, 或状态 未修改,正文 我的endpoint使用(在kotlin中)的方式如下: 问题 每当我用状态代码创建< code>ResponseEntity时!= 200,正文不发(空正文)。将< code>Htt

  • 问题内容: 我有以下ajax请求: 由于某种原因,错误的回调被称为事件,尽管http状态代码为200,即。该请求是可以的。为什么是这样? 问题答案: 问题可能是从网址返回的json数据格式错误。当服务器实际返回内容时,http状态代码为200。但这并不意味着数据是正确的json。检查返回的字符串化json数据格式正确。 我要回答自己的邀请,因为我是很难学到的。我没有在json数据中转义“-”引号字

  • 有没有办法获取HTTP状态码(比如200400…)在观察实时数据之前? 这是我的实现: 后果 基本存储库 我的存储库 视图模型 在我的代码中,我执行以下操作: 在哪里可以查看状态代码?我不知道在哪里实现状态码返回。

  • 我知道有人正在编写一个API,并希望使用HTTP状态代码来报告查询的结果。例如,如果用户调用,并且产品不存在,它将返回HTTP状态。我认为,因为这是一个有效的调用(即实际的HTTP请求没有格式错误),它应该返回一个code响应,并且只需要响应的主体类似于。 所以我的问题是,, 1) 使用HTTP状态码来传递非HTTP程序状态是否合适,如上面的示例所示? 2)是否有一些标准规范,或者至少是广泛使用的