Spring WebClient 将错误映射到 HEAD 请求中的响应

问题描述 投票:0回答:1

我想处理 HEAD 端点,以便如果 HTTP 状态成功,我会返回

true
。如果是 404,我就返回
false
。否则,我想抛出不同的异常。

我目前有以下内容:

    boolean head(String param) {
        return webClient.head()
            .uri(fromPath(PATH).pathSegment(param))
            .exchangeToMono(response -> {
                if(response.statusCode().is2xxSuccessful()){
                    return Mono.just(Boolean.TRUE);
                } else if (response.statusCode().equals(NOT_FOUND)){
                    return Mono.just(Boolean.FALSE);
                }
                //what to do here?
            })
            .onErrorMap(this::mapErrorFunction)
            .block();
    }

我的

mapErrorFunction
已被其他方法使用,并且这是我想要使用的方法,因为根据引发的异常,将完成一件事或另一件事。但是,它需要一个
Throwable
类型的参数,当到达
exchangeToMono
块的末尾时我没有该参数,因此我无法在此时执行
this.mapErrorFunction

备案成功,404例均正常运行。

我该怎么做?也许

exchangeToMono
在这里不是正确的选择。

java spring spring-restcontroller spring-webclient
1个回答
0
投票

答案是在 if else 之后抛出异常并让

onErrorMap
方法处理它:

   boolean head(String param) {
        return Boolean.TRUE.equals(webClient.head()
        .uri(uri.toUriString())
        .exchangeToMono(response -> {
            if (response.statusCode().is2xxSuccessful()) {
                return Mono.just(Boolean.TRUE);
            } else if (response.statusCode().equals(NOT_FOUND)) {
                return Mono.just(Boolean.FALSE);
            }
            return response.createException().flatMap(Mono::error);

        })
        .onErrorMap(this::mapErrorFunction)
        .block());
© www.soinside.com 2019 - 2024. All rights reserved.