java - 打印 doOnError 的响应

标签 java spring spring-boot spring-webflux

我正在尝试使用 Spring Web Flux 来实现此代码: 您能否指导我如何根据客户端响应代码调用两个方法 parseRawSuccessResponseparseRawFailedResponse 因为我有不同的返回值?另外,如何在不使用 block() 的情况下实现这段代码?

我尝试过这个:

Mono<AuthorizeRequest> transactionMono = Mono.just(transaction);
        return client.post().uri(checkTrailingSlash(gatewayUrl) + token)
                .body(transactionMono, AuthorizeRequest.class)
                .exchange()
                .flatMap(clientResponse -> {
                    if (clientResponse.statusCode().is4xxClientError()) {

                        return Mono.error(RuntimeException::new);
                    }
                    return clientResponse.bodyToMono(AuthorizeResponse.class);
                });

//解析响应:

result.map(fooBar -> {
                    return parseRawSuccessResponse(fooBar);
                }).doOnError(throwable -> {                                 
//                  return parseRawFailedResponse(throwable);
                }).block();

最佳答案

您可以使用可用于 java 的析取类型实现之一。

val result: Mono<Either<ClientError, AuthorizeResponse>> = 
    client.post().uri(checkTrailingSlash(gatewayUrl) + token)
        .body(transactionMono, AuthorizeRequest.class)
        .exchange()
        .flatMap(response -> {
            if (clientResponse.statusCode().is2xxSuccessful()) {
                return response.bodyToMono(AuthorizeResponse.class).map(Either::right);
            } else if (clientResponse.statusCode().is4xxClientError()) {
                return response.bodyToMono(ClientError.class).map(Either::left);
            } else {
                return Mono.error(new RuntimeException("Unexpected response type"));
            }
        });

您可以自己实现析取类型,只需使用现有的实现即可。流行的选项之一是:vavr.io

回答问题的第二部分,请使用Mono.subscribe()。使用 .block() 转义响应式(Reactive)上下文并不惯用,您只需根据 Monos 和 Fluxes 构建计算链,然后在最后执行一次订阅即可。

关于java - 打印 doOnError 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697717/

相关文章:

java - 用于 spring 测试的 JUnit 多个事务管理器

java - 以毫秒为单位的 Java 时间到底意味着什么?

Java 数据建模 - 将关系数据保存为可互操作的格式

java - BindingResult 方法参数的存在决定了抛出的异常?

rest - 如何将 HashSet 传递到服务器以测试 postman 的 API?

java - 加载一个java项目

java - 使用参数args编写JavaConfig bean间依赖

Spring (数据、mvc、安全)依赖项 : IncompatibleClassChangeError

java - 无法获取 JdbcConnectionException : The BUFFERDIR connection property is invalid

Spring Boot 1.5.3 NoSuchMethodError : org. springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.getResponseStatus()