【问题标题】:Latest Spring Boot [2.5.0] webclient bug?最新的 Spring Boot [2.5.0] webclient 错误?
【发布时间】:2021-10-13 19:16:56
【问题描述】:

我最近将我的项目升级到最新版本的 spring-boot 2.5.0 并着手重构大量已弃用的代码。我注意到 awaitExchange() 现在已被弃用,应替换为 awaitExchange{it}

但是,一旦我将一个替换为另一个,我似乎无法再通过 response.awaitBody() 在另一个类中从 ClientResponse 对象中提取正文并继续获取 No value received via onNext for awaitSingle。这种行为是设计使然吗? 有没有其他方法可以真正抓住身体而不必使用` awaitExchange{ it.awaitBody() } 在进行 web 服务调用的类中?

【问题讨论】:

    标签: java spring-boot kotlin spring-webflux spring-webclient


    【解决方案1】:

    由于您没有显示您的代码,因此很难说出问题所在。但是你可以通过以下方式使用WebClient

    val client = WebClient.create()
    
    val data: MultiValueMap<String, String> = LinkedMultiValueMap()
    data["username"] = "johndoe"
    data["target_site"] = "aloha"
    
    client.create()
          .post()
          .uri("some uri")
          .contentType(MediaType.APPLICATION_FORM_URLENCODED)
          .body(BodyInserters.fromFormData(data))
          .retrieve()
          .awaitBodyOrNull<String>() ?: throw Exception("Received null response")
    

    另一种方法是

    val response = client.get()
                         .uri("some uri")
                         .contentType(MediaType.APPLICATION_JSON)
                         .retrieve()
                         .toEntity(String::class.java)
                         .awaitSingle()
    
    if (!response.statusCode.is2xxSuccessful) {
    
        throw Exception("Received ${response.statusCodeValue} response.")
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-16
      • 2021-08-31
      • 2021-08-02
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2021-08-06
      • 2021-04-05
      • 2013-04-14
      相关资源
      最近更新 更多