springboot webflux webclient 使用说明


springboot webflux webclient 使用说明

 

应用:webflux可使用webclient获取网络资源

 

 

************************

相关类与接口

 

WebClient

public interface WebClient {
    WebClient.RequestHeadersUriSpec<?> get();
    WebClient.RequestHeadersUriSpec<?> head();

    WebClient.RequestBodyUriSpec post();
    WebClient.RequestBodyUriSpec put();
    WebClient.RequestBodyUriSpec patch();

    WebClient.RequestHeadersUriSpec<?> delete();
    WebClient.RequestHeadersUriSpec<?> options();

    WebClient.RequestBodyUriSpec method(HttpMethod var1);

    WebClient.Builder mutate();

    static WebClient create() {      //创建WebClient对象
        return (new DefaultWebClientBuilder()).build();
    }

    static WebClient create(String baseUrl) {
        return (new DefaultWebClientBuilder()).baseUrl(baseUrl).build();
    }

    static WebClient.Builder builder() {
        return new DefaultWebClientBuilder();
    }

    public interface RequestBodyUriSpec extends WebClient.RequestBodySpec, WebClient.RequestHeadersUriSpec<WebClient.RequestBodySpec> {
    }

    public interface RequestHeadersUriSpec<S extends WebClient.RequestHeadersSpec<S>> extends WebClient.UriSpec<S>, WebClient.RequestHeadersSpec<S> {
    }

    public interface ResponseSpec {
        WebClient.ResponseSpec onStatus(Predicate<HttpStatus> var1, Function<ClientResponse, Mono<? extends Throwable>> var2);

        WebClient.ResponseSpec onRawStatus(IntPredicate var1, Function<ClientResponse, Mono<? extends Throwable>> var2);

        <T> Mono<T> bodyToMono(Class<T> var1);
        <T> Mono<T> bodyToMono(ParameterizedTypeReference<T> var1); 
                              //使用该方法可将返回结果转换为指定的类型,
                              //如:new ParameterizedTypeReference<Map<String,String>> 转换为 Map<String,String>
                              // new ParameterizedTypeReference<Person> 转换为 Person类

        <T> Flux<T> bodyToFlux(Class<T> var1);
        <T> Flux<T> bodyToFlux(ParameterizedTypeReference<T> var1);

        <T> Mono<ResponseEntity<T>> toEntity(Class<T> var1);
        <T> Mono<ResponseEntity<T>> toEntity(ParameterizedTypeReference<T> var1);

        <T> Mono<ResponseEntity<List<T>>> toEntityList(Class<T> var1);
        <T> Mono<ResponseEntity<List<T>>> toEntityList(ParameterizedTypeReference<T> var1);

        Mono<ResponseEntity<Void>> toBodilessEntity();
    }

    public interface RequestBodySpec extends WebClient.RequestHeadersSpec<WebClient.RequestBodySpec> {
        WebClient.RequestBodySpec contentLength(long var1);
        WebClient.RequestBodySpec contentType(MediaType var1);

        WebClient.RequestHeadersSpec<?> bodyValue(Object var1);

        <T, P extends Publisher<T>> WebClient.RequestHeadersSpec<?> body(P var1, Class<T> var2);
        <T, P extends Publisher<T>> WebClient.RequestHeadersSpec<?> body(P var1, ParameterizedTypeReference<T> var2);

        WebClient.RequestHeadersSpec<?> body(Object var1, Class<?> var2);
        WebClient.RequestHeadersSpec<?> body(Object var1, ParameterizedTypeReference<?> var2);
        WebClient.RequestHeadersSpec<?> body(BodyInserter<?, ? super ClientHttpRequest> var1);

        /** @deprecated */
        @Deprecated
        WebClient.RequestHeadersSpec<?> syncBody(Object var1);
    }

    public interface RequestHeadersSpec<S extends WebClient.RequestHeadersSpec<S>> {
        S accept(MediaType... var1);
        S acceptCharset(Charset... var1);

        S cookie(String var1, String var2);
        S cookies(Consumer<MultiValueMap<String, String>> var1);

        S ifModifiedSince(ZonedDateTime var1);
        S ifNoneMatch(String... var1);

        S header(String var1, String... var2);
        S headers(Consumer<HttpHeaders> var1);

        S attribute(String var1, Object var2);
        S attributes(Consumer<Map<String, Object>> var1);

        WebClient.ResponseSpec retrieve();
        Mono<ClientResponse> exchange();
    }

    public interface UriSpec<S extends WebClient.RequestHeadersSpec<?>> {
        S uri(URI var1);                        //设置请求的uri
        S uri(String var1, Object... var2);
        S uri(String var1, Map<String, ?> var2);
        S uri(String var1, Function<UriBuilder, URI> var2);
        S uri(Function<UriBuilder, URI> var1);
    }

    public interface Builder {
        WebClient.Builder baseUrl(String var1);

        WebClient.Builder defaultUriVariables(Map<String, ?> var1);
        WebClient.Builder uriBuilderFactory(UriBuilderFactory var1);

        WebClient.Builder defaultHeader(String var1, String... var2);
        WebClient.Builder defaultHeaders(Consumer<HttpHeaders> var1);

        WebClient.Builder defaultCookie(String var1, String... var2);
        WebClient.Builder defaultCookies(Consumer<MultiValueMap<String, String>> var1);

        WebClient.Builder defaultRequest(Consumer<WebClient.RequestHeadersSpec<?>> var1);

        WebClient.Builder filter(ExchangeFilterFunction var1);
        WebClient.Builder filters(Consumer<List<ExchangeFilterFunction>> var1);

        WebClient.Builder clientConnector(ClientHttpConnector var1);
        WebClient.Builder codecs(Consumer<ClientCodecConfigurer> var1);
        WebClient.Builder exchangeStrategies(ExchangeStrategies var1);

        /** @deprecated */
        @Deprecated
        WebClient.Builder exchangeStrategies(Consumer<org.springframework.web.reactive.function.client.ExchangeStrategies.Builder> var1);

        WebClient.Builder exchangeFunction(ExchangeFunction var1);
        WebClient.Builder apply(Consumer<WebClient.Builder> var1);
        WebClient.Builder clone();

        WebClient build();
    }
}

 

 

DefaultWebClient:默认实现类

class DefaultWebClient implements WebClient {
    private static final String URI_TEMPLATE_ATTRIBUTE = WebClient.class.getName() + ".uriTemplate";
    private static final Mono<ClientResponse> NO_HTTP_CLIENT_RESPONSE_ERROR = Mono.error(new IllegalStateException("The underlying HTTP client completed without emitting a response."));
    private final ExchangeFunction exchangeFunction;
    private final UriBuilderFactory uriBuilderFactory;
    @Nullable
    private final HttpHeaders defaultHeaders;
    @Nullable
    private final MultiValueMap<String, String> defaultCookies;
    @Nullable
    private final Consumer<RequestHeadersSpec<?>> defaultRequest;
    private final DefaultWebClientBuilder builder;


***********
构造方法

    DefaultWebClient(ExchangeFunction exchangeFunction, @Nullable UriBuilderFactory factory, @Nullable HttpHeaders defaultHeaders, @Nullable MultiValueMap<String, String> defaultCookies, @Nullable Consumer<RequestHeadersSpec<?>> defaultRequest, DefaultWebClientBuilder builder) {
        this.exchangeFunction = exchangeFunction;
        this.uriBuilderFactory = (UriBuilderFactory)(factory != null ? factory : new DefaultUriBuilderFactory());
        this.defaultHeaders = defaultHeaders;
        this.defaultCookies = defaultCookies;
        this.defaultRequest = defaultRequest;
        this.builder = builder;
    }


***********
普通方法

    public RequestHeadersUriSpec<?> get() {
        return this.methodInte
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot WebClient 是一个非阻塞的基于响应式编程的进行 HTTP 请求的客户端工具,它是在 Spring 5 中引入的一种非阻塞式 Reactive HTTP 客户端。与传统的 RestTemplate 相比,WebClient 使用异步非阻塞的请求模式,能够以少量固定的线程处理高并发的 HTTP 请求。因此,从 Spring 5 开始,推荐使用 WebClient 来进行 HTTP 通信。通过在 pom.xml 文件中添加 Spring WebFlux 依赖,你可以使用 WebClient。 你可以通过创建 WebClient 实例并使用它来发送 HTTP 请求。关于如何使用 WebClient,你可以参考 Spring 官方文档中提供的样例演示。 WebClient 具有以下优势:首先,它支持非阻塞的异步请求模式,这意味着它可以处理大量并发的请求;其次,它支持响应式编程,使得处理异步数据流更加方便;最后,它提供了丰富的 API,可以灵活地进行请求和响应处理。因此,如果你在使用 Spring Boot 开发应用程序,并需要进行 HTTP 通信,强烈建议你使用 WebClient 来替代 RestTemplate。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringBoot - 网络请求客户端WebClient使用详解](https://blog.csdn.net/weixin_35688430/article/details/119750922)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [springboot-webFluxwebclient详细使用介绍,细节拉满](https://blog.csdn.net/A_art_xiang/article/details/127025263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值