Webクライアントを介したアクセスWebリソースを

Webクライアントを学びます

Webクライアント

  • プロセスのHTTPリクエストのノンブロッキングクライアントへの反応性⼀シャッターモード

基礎となるHTTPライブラリをサポートしています

  • 原子炉ネッティー - ReactorClientHttpConnector(常用)
  • 桟橋ReactiveStream HttpClientを - JettyClientHttpConnector

Webクライアントの基本的な使い方

作成Webクライアント

  • WebClient.create()

  • WebClient.builder()

要求を開始

  • 取得()/ポスト()/ PUT()/削除()/パッチ()

結果を見ます

  • ()/交換()を取得

処理HTTPステータス

  • onStatus()

回答テキスト

  • bodyToMono()/ bodyToFlux()

@SpringBootApplication
@Slf4j
public class WebclientDemoApplication implements ApplicationRunner {
	@Autowired
	private WebClient webClient;

	public static void main(String[] args) {
		new SpringApplicationBuilder(WebclientDemoApplication.class)
				.web(WebApplicationType.NONE)
				.bannerMode(Banner.Mode.OFF)
				.run(args);
	}

	@Bean
	public WebClient webClient(WebClient.Builder builder) {
		return builder.baseUrl("http://localhost:8080").build(); //所有请求的基础uri
	}

	@Override
	public void run(ApplicationArguments args) throws Exception {
		CountDownLatch cdl = new CountDownLatch(2);

		webClient.get()  //创造一个get请求
				.uri("/coffee/{id}", 1) //访问的uri
				.accept(MediaType.APPLICATION_JSON_UTF8)//设置一个接收头 响应为JSON_UTF8格式
				.retrieve()			//获取结果 可以用exchange代替
				.bodyToMono(Coffee.class)  //将结果转为Mono类型 baby类型为coffee类型 处理单组数据
				.doOnError(t -> log.error("Error: ", t))
				.doFinally(s -> cdl.countDown()) //让主线程等待异步的线程
				.subscribeOn(Schedulers.single())//在single线程中做subscribe
				.subscribe(c -> log.info("Coffee 1: {}", c));

		Mono<Coffee> americano = Mono.just(
				Coffee.builder()
						.name("americano")
						.price(Money.of(CurrencyUnit.of("CNY"), 25.00))
						.build()
		);
		webClient.post()   //创建一个post请求
				.uri("/coffee/")
				.body(americano, Coffee.class)//post正文
				.retrieve()//获取结果 可以用exchange代替
				.bodyToMono(Coffee.class)//处理单组数据
				.doFinally(s -> cdl.countDown())//让主线程等待异步的线程
				.subscribeOn(Schedulers.single())
				.subscribe(c -> log.info("Coffee Created: {}", c));

		cdl.await();

		webClient.get()//创建一个get请求
				.uri("/coffee/")
				.retrieve() // 获取结果 可以用exchange代替  返回的上一个coffee的list
				.bodyToFlux(Coffee.class)//处理多个对象 即多组数据
				.toStream() //变成一stream
				.forEach(c -> log.info("Coffee in List: {}", c));
	}
}

結果

ここに画像を挿入説明

分析

シングルでオーダーするので、クエリのコーヒーを使用し、コーヒーの作成が誰であるかは必ずしもないが誰であるか、のコードの元ではなく、注文後。場合は、他の方法のために、死への書き込み。

公開された59元の記事 ウォンの賞賛6 ビュー1099

おすすめ

転載: blog.csdn.net/weixin_43790623/article/details/104064769