WebClient – 添加 defaultHeaders

huangapple go评论110阅读模式
英文:

WebClient - adding defaultHeaders

问题

  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(httpHeaders -> {
  5. HttpHeaders headers = createHeaders(token); // Replace 'token' with your actual token value
  6. httpHeaders.addAll(headers);
  7. }) // Consumer<HttpHeaders>
  8. .build();

请注意,您需要将上述代码中的token替换为您实际的令牌值。这段代码将使用createHeaders()方法创建的HttpHeaders对象添加到defaultHeaders中,以将多个标头添加到WebClient中。

英文:

I'm trying to put multiple headers into defaultHeaders(), But I don't have idea how to create Consumer object from return of createHeaders() method

  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(????) // Consumer&lt;HttpHeaders&gt;
  5. .build();

I can build my header in that way:

  1. private HttpHeaders createHeaders(String token) {
  2. HttpHeaders headers = new HttpHeaders();
  3. headers.add(HttpHeaders.ACCEPT, V1_PUBLIC);
  4. headers.add(HttpHeaders.HOST, &quot;abc&quot;);
  5. headers.add(HttpHeaders.AUTHORIZATION, &quot;Bearer &quot; + token);
  6. return headers;
  7. }

but how to wrap it into Consumer?

答案1

得分: 15

清楚地说,方法文档指出它需要一个某种类型的Consumer。因此您可以创建一个实现了Consumer接口的匿名类,或者像这样使用lambda表达式

  1. 使用匿名内部类:
  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(new Consumer<HttpHeaders>() {
  5. @Override
  6. public void accept(HttpHeaders httpHeaders) {
  7. httpHeaders.addAll(createHeaders(token));
  8. }
  9. })
  10. .build();
  1. 使用lambda:
  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(httpHeaders -> {
  5. httpHeaders.addAll(createHeaders(token));
  6. })
  7. .build();
英文:

Clearly the method doc says that it needs a Consumer of some Type. So you can create an anonymous class implementing the Consumer interface or use lambda expression like this:

  1. Using anonymous inner class:
  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(new Consumer&lt;HttpHeaders&gt;() {
  5. @Override
  6. public void accept(HttpHeaders httpHeaders) {
  7. httpHeaders.addAll(createHeaders(token));
  8. }
  9. })
  10. .build();
  1. Using lambda:
  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(httpHeaders -&gt; {
  5. httpHeaders.addAll(createHeaders(token));
  6. })
  7. .build();

答案2

得分: 2

  1. private void addDefaultHeaders(final HttpHeaders headers) {
  2. headers.add(HttpHeaders.CONTENT_TYPE, "application/json");
  3. headers.add(HttpHeaders.ACCEPT, "application/json");
  4. }

然后

  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(this::addDefaultHeaders)
  5. .build();
英文:
  1. private void addDefaultHeaders(final HttpHeaders headers) {
  2. headers.add(HttpHeaders.CONTENT_TYPE, &quot;application/json&quot;);
  3. headers.add(HttpHeaders.ACCEPT, &quot;application/json&quot;);
  4. }

and then

  1. this.someWebClient = WebClient.builder()
  2. .baseUrl(someConfiguration.getApiUrl())
  3. .clientConnector(buildTimeoutConnector())
  4. .defaultHeaders(this::addDefaultHeaders)
  5. .build();

答案3

得分: 1

使用以下代码:

  1. @Bean
  2. public WebClient webClientConfiguration() {
  3. return WebClient
  4. .builder()
  5. .clientConnector(new ReactorClientHttpConnector(HttpClient.create()
  6. .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
  7. .responseTimeout(Duration.ofMillis(responseTimeout))
  8. ))
  9. .baseUrl(this.msConfigProperties.getApiUrl())
  10. .defaultHeaders(httpHeaders())
  11. .build();
  12. }

然后是消费者函数:

  1. private Consumer<HttpHeaders> httpHeaders(){
  2. return headers -> {
  3. headers.set(HEADER_CONTENT_TYPE, String.valueOf(MediaType.APPLICATION_JSON));
  4. headers.setBasicAuth(this.msConfigProperties.getUserName(),this.msConfigProperties.getPassword());
  5. headers.set(HEADER_ACCEPT_ENCODING, String.valueOf(MediaType.APPLICATION_JSON));
  6. };
  7. }
英文:

Use this.

  1. @Bean
  2. public WebClient webClientConfiguration() {
  3. return WebClient
  4. .builder()
  5. .clientConnector(new ReactorClientHttpConnector(HttpClient.create()
  6. .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
  7. .responseTimeout(Duration.ofMillis(responseTimeout))
  8. ))
  9. .baseUrl(this.msConfigProperties.getApiUrl())
  10. .defaultHeaders(httpHeaders())
  11. .build();
  12. }

Then Consumer function

  1. private Consumer&lt;HttpHeaders&gt; httpHeaders(){
  2. return headers -&gt; {
  3. headers.set(HEADER_CONTENT_TYPE, String.valueOf(MediaType.APPLICATION_JSON));
  4. headers.setBasicAuth(this.msConfigProperties.getUserName(),this.msConfigProperties.getPassword());
  5. headers.set(HEADER_ACCEPT_ENCODING, String.valueOf(MediaType.APPLICATION_JSON));
  6. };
  7. }

huangapple
  • 本文由 发表于 2020年7月28日 22:16:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/63136226.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定