小编Cor*_*ryO的帖子

在WebFlux WebClient中测试状态代码时如何获取响应正文?

尝试根据返回的状态码引发异常时,如何检索响应主体?例如,假设我要抛出异常并拒绝HTTP 201。

client.post().exchange().doOnSuccess(response -> {
    if (response.statusCode().value() == 201) {
        throw new RuntimeException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何用响应的正文填充异常,以便抛出详细信息WebClientResponseException?

我应该使用其他方法来测试响应状态代码吗?

编辑:我试图在使用时复制以下功能exchange()。

client.get()
    .retrieve()
    .onStatus(s -> !HttpStatus.CREATED.equals(s),
        MyClass::createResponseException);

//MyClass
public static Mono<WebClientResponseException> createResponseException(ClientResponse response) {
    return response.body(BodyExtractors.toDataBuffers())
            .reduce(DataBuffer::write)
            .map(dataBuffer -> {
                byte[] bytes = new byte[dataBuffer.readableByteCount()];
                dataBuffer.read(bytes);
                DataBufferUtils.release(dataBuffer);
                return bytes;
            })
            .defaultIfEmpty(new byte[0])
            .map(bodyBytes -> {
                String msg = String.format("ClientResponse has erroneous status code: %d %s", response.statusCode().value(),
                        response.statusCode().getReasonPhrase());
                Charset charset = response.headers().contentType()
                        .map(MimeType::getCharset)
                        .orElse(StandardCharsets.ISO_8859_1);
                return new WebClientResponseException(msg,
                        response.statusCode().value(),
                        response.statusCode().getReasonPhrase(), …
Run Code Online (Sandbox Code Playgroud)

java spring-webflux

11
推荐指数
2
解决办法
2万
查看次数

如何使用WebClient执行零拷贝上传和下载?

您可以使用Spring 5 WebFlux执行零拷贝上传和下载org.springframework.web.reactive.function.client.WebClient吗?

java spring-webflux

6
推荐指数
1
解决办法
2933
查看次数

标签 统计

java ×2

spring-webflux ×2