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

Spring WebClient-HTTP错误状态的自定义响应回调

南宫才艺
2023-03-14

如果我的WebClient请求收到HTTP 4xx或5xx错误,我需要进行另一次HTTP调用。

webClient.post()
         .uri(myUri)
         .headers(myHeaders)
         .body(myBody)
         .retrieve()
         .onStatus(HttpStatus::isError, responseStrategy::errorResponseCallback)
         ...
    public Mono<? extends Throwable> errorResponseCallback(ClientResponse clientResponse) {
        ... make ugly new HTTP request here 

        return Mono.error(...);
    }

对于这种情况,正确的做法是什么?

共有1个答案

陈宏胜
2023-03-14

如果要模拟一些基于fallback的逻辑,可以使用onerrorResume方法,而fallback函数的结果将传递给下游。WebClient会以错误的形式威胁不成功的结果,因此调用onerrorResume

webClient.post()
         .uri(myUri)
         .headers(myHeaders)
         .body(myBody)
         .retrieve()
         .bodyToMono(String.class)
         .onErrorResume(error -> ... your fallback logic ...)

如果您只是想执行一些副作用,并且希望将错误保留到反应流中,则可以使用:

webClient.post()
         .uri(myUri)
         .headers(myHeaders)
         .body(myBody)
         .retrieve()
         .bodyToMono(String.class)
         .doOnError(error -> ... your fallback logic ...)
 类似资料:
  • 然而,这产生了(正如怀疑的那样)完全不同的反应:

  • Apache可以让网站管理员自己自定义对一些错误和问题的响应。 自定义的响应可以定义为当服务器检测到错误或问题时才被激活。 如果一个脚本崩溃并产生"500 Server Error"响应,那么这个响应可以被更友好的提示替换或者干脆用重定向语句跳到其他的URL(本地的或外部的)。 行为 老式的行为 Apache1.3 会响应一些对于用户没有任何意义的错误或问题信息,而且不会将产生这些错误的原因写入日

  • 我正在努力裁剪javax。验证。ConstraintValidator和javax。验证。根据我的需要限制ValidatorContext。我从格式错误的请求正文收到的响应消息始终采用以下形状: <代码> 此消息也以500而不是400错误请求的形式返回。我无法获得工作到解决方案来执行以下操作: 仅包括<代码> 我有以下代码: 向上面的代码发送格式错误的有效负载将导致如下消息: 我希望能够收到以下信

  • 在Spring MVC@RequestMapping注释中,我返回JSP页面名称作为结果。这将返回HTTP状态代码200OK。如何将此状态代码更改为创建的201? @ResponseStatus不起作用。另外,HttpServletResponse也不能工作,因为我只需要返回自定义JSP页面。

  • 下面是我正在使用的一段代码: 期望reponse conatins的状态行:“HTTP/1.1400坏请求”想知道这是可以实现的吗?如果是,那么我如何继续做同样的事情。

  • 我考虑在项目中使用fluent-http。 所以我尝试注入: 返回正确的字符串,但似乎没有使用状态代码。在这两种情况下,响应都有一个代码HTTP200。 注意:我发现一些状态代码是预先实现的: null