当响应具有 HTTP 错误状态代码时,为什么我会得到“只允许一个连接接收订阅者”?
Why do I get `Only one connection receive subscriber allowed` when the response has an HTTP error status code?
在休息请求中,我使用 Spring WebClient 向网络服务发送另一个请求,并希望 return 将结果发送给调用者:
return webClient.post()
.uri(url)
.body(...)
.retrieve()
.bodyToMono(String::class.java)
.map { ResponseEntity.ok(it) }
现在 Web 服务 return 是一个 HTTP 错误状态代码,我收到以下错误:
java.lang.IllegalStateException: Only one connection receive subscriber allowed.
return编辑状态 200 代码时,不会引发任何错误。
我也试过检查状态并自己抛出异常,但行为仍然是一样的:
return webClient.post()
.uri(url)
.body(...)
.retrieve()
.onStatus(HttpStatus::isError) { clientResonse ->
clientResonse.bodyToMono(String::class.java)
.map { RuntimeException(it) }
}
.bodyToMono(String::class.java)
.map { ResponseEntity.ok(it) }
我做错了什么?
代码示例在 Kotlin 中,但我假设每个 Java 开发人员都能阅读它:)
这是 Spring Framework 中的一个已知问题,已在 Spring Framework 5.1.4 中修复 - 请参阅 SPR-17564。
不幸的是,我不知道这个问题有任何解决方法,所以升级到 Spring Framework 5.1.4 / Spring Boot 2.1.2 是目前唯一的解决方案。
在休息请求中,我使用 Spring WebClient 向网络服务发送另一个请求,并希望 return 将结果发送给调用者:
return webClient.post()
.uri(url)
.body(...)
.retrieve()
.bodyToMono(String::class.java)
.map { ResponseEntity.ok(it) }
现在 Web 服务 return 是一个 HTTP 错误状态代码,我收到以下错误:
java.lang.IllegalStateException: Only one connection receive subscriber allowed.
return编辑状态 200 代码时,不会引发任何错误。
我也试过检查状态并自己抛出异常,但行为仍然是一样的:
return webClient.post()
.uri(url)
.body(...)
.retrieve()
.onStatus(HttpStatus::isError) { clientResonse ->
clientResonse.bodyToMono(String::class.java)
.map { RuntimeException(it) }
}
.bodyToMono(String::class.java)
.map { ResponseEntity.ok(it) }
我做错了什么?
代码示例在 Kotlin 中,但我假设每个 Java 开发人员都能阅读它:)
这是 Spring Framework 中的一个已知问题,已在 Spring Framework 5.1.4 中修复 - 请参阅 SPR-17564。
不幸的是,我不知道这个问题有任何解决方法,所以升级到 Spring Framework 5.1.4 / Spring Boot 2.1.2 是目前唯一的解决方案。