java 根据条件[duplicate]在链中进行函数调用

falq053o  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(106)

此问题在此处已有答案

Builder with conditional inclusion of element(4个答案)
14小时前关门了。
假设我正在使用webClient发出请求,我需要在这里将.header("Authorization", String.format("Bearer %s", token))调用设置为可选。我的意思是,如果someParamtrue,我添加authorization头,如果它为false,我根本不需要授权。在这里不添加if-else是否可行?

void function(someParam bool) { 
       String responseString = webClient.post()
                            .uri(requestUrl)
                            .header("Authorization", String.format("Bearer %s", token))
                            .contentType(MediaType.APPLICATION_JSON)
                            .accept(MediaType.APPLICATION_JSON)
                            .body(Mono.just(request), request.getClass())
                            .retrieve()
                            .bodyToMono(String.class)
                            .timeout(Duration.ofSeconds(maxAnalysingTime))
                            .block();
    }

我不知道如何谷歌这个问题,因为搜索引擎得到触发的话可选,和条件,我得到的是关于可选类和如果在java中的其他文章。

xt0899hw

xt0899hw1#

没有办法避免分支,但是可以通过调用headers方法(它接受Consumer<HttpHeaders>作为参数)来保持链接。

webClient.post().uri(requestUrl).headers(headers -> {
    if (someParam) headers.set("Authorization", String.format("Bearer %s", token));
})
// other configuration options...
fnvucqvd

fnvucqvd2#

除了使用一个中间变量来拆分这个链之外,我看不出还有其他选择:

var builder = webClient.post()
                        .uri(requestUrl);
    if (someParam) {
        builder = builder.header("Authorization", String.format("Bearer %s", token));
    }
    String responseString = builder
                        .contentType(MediaType.APPLICATION_JSON)
                        .accept(MediaType.APPLICATION_JSON)
                        .body(Mono.just(request), request.getClass())
                        .retrieve()
                        .bodyToMono(String.class)
                        .timeout(Duration.ofSeconds(maxAnalysingTime))
                        .block();

相关问题