WebClient란?
Webclient는 스프링 5.0에서 추가된 인터페이스이다. 5.0 이전에는 RestTemplate를 사용했었다. 하지만 스프링 5.0부터는 WebClient를 사용할 것을 권장한다.
특징
- Json, XML을 쉽게 응답받음.
- Non-Blocking 방식을 사용
- 싱글 스레드 방식을 사용
예시
의존성 설정
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.projectreactor</groupId>
<artifactId>reactor-spring</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
Gradle
implementation 'org.springframework.boot:spring-boot-starter-webflux'
WebClient 생성
- WebClient.create();
- Builder를 활용한 클래스 생성
Webclient sanhaClient = WebClient
.builder()
.baseUrl("http://locahost:8080)
.defaultCookie()
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
Request
WebClient.RequestHeaderUriSpec<?> baseSpec = Webclient.builder()
.baseUrl("주소")
.build()
.get();
// baseSpec에 원하는 파라미터를 추가로 붙여서 요청한다.
baseSpec.uri(builder -> builder.path("/")
.queryParam("이름","값")
.builder()
)
.retrieve() // Response를 받아옴.
Method 설정
WebClient.create().method(HttpMethod.POST);
WebClient.create().post();
WebClient.create().get();
URL 설정
WebClient.create().get().uri("/resource");
WebClient.create().post().uri(URI.create("/resource"));
Parameter 으로 전달
WebClient.create().get()
.uri(uriBuilder ->
uriBuilder.path("/test")
.queryParam("name", "value")
.build()
).retrieve();
객체로 전달
WebClient.create().post()
.bodyValue(loginInfo)
.exchange();
formData로 전달
WebClient.create().post()
.body(BodyInserters.fromFormData("id","tester").with("password","1234").with(...))
.exchange();
// MultiValueMap
MultiValueMap map = new LinkedMultiValueMap();
map.add("key1", "value1");
map.add("key2", "value2");
WebClient.create().post()
.body(BodyInserters.fromFormData(params))
.exchange();
Response
- exchange() -> ClientResponse를 상태값 그리고 헤더와 함께 가져옴
- retrieve() -> body를 바로 가져온다.
String exchangeResponse = req.exchange().block().bodyToMono(String.class).block();
String retrieveResponse = req2.retrieve().bodyToMono(String.class).block();
* bodyToMono는 가져온 body를 Reactor의 Mono 객체로 바꿔줌 (0-1개의 결과를 처리)
*Flux는 (0-N)개의 결과를 처리
*bloc()를 사용하면 동기식으로 사용 가능
'Programming > Back-end Language' 카테고리의 다른 글
Apache Tomcat과 JAVA (0) | 2024.05.16 |
---|---|
트랜잭션 (0) | 2024.04.19 |
[Spring] @Valid를 이용한 유효성검증 (1) | 2022.06.17 |
[JAVA] Comparable, Comparator이란? (0) | 2022.05.26 |
[JAVA] BufferedReader와 StringTokenizer 사용법 (0) | 2022.05.09 |