Spring Web Client에서 응답 json을 가져오는 방법
사용법에 대해 가장 간단한 튜토리얼을 따르려고 노력해 왔습니다.WebClient
내가 이해하는 것은 다음으로 위대한 것입니다.RestTemplate
.
예: https://www.baeldung.com/spring-5-webclient#4-getting-a-response
그래서 제가 https://petstore.swagger.io/v2/pet/findByStatus?status=available 에서 json을 돌려주기로 한 것과 같은 일을 하려고 할 때,
WebClient webClient = WebClient.create();
webClient.get().uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available").exchange().block();
결과에서 어떻게 진행해야 할지 전혀 모르겠습니다.DefaultClientResponse
물건.물리적 대응 기관에 도착하는 것이 이렇게 복잡해서는 안 되지만, 저는 탈선합니다.
제가 제공한 코드로 응답 본문을 어떻게 얻을 수 있습니까?
현재 가지고 있는 형태로, 그리고 행동을 설명합니다.
WebClient webClient = WebClient.create();
webClient.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.exchange()
.block();
그block()
내부적으로 동기화하여 에 가입함으로써 요청을 시작합니다.Mono
결과를 반환합니다.ClientResponse
전화를 걸어 비동기식으로 처리할 수도 있습니다.subscribe()
에서Mono
에 의해 반환된.exchange()
메소드, 대신block()
.
이 현재 양식에서, 다음은block()
이제 응답에 대한 모든 메타데이터(즉, 응답 헤더에서)를 가지고 있습니다.ClientResponse
개체(성공 상태 포함)입니다.이것은 응답 기관이 완료되었다는 것을 의미하지 않습니다.응답 페이로드에 대해 관심이 없는 경우 성공을 확인하고 그대로 둘 수 있습니다.
응답 본문을 자세히 보려면 응답 본문 스트림을 일부 클래스로 변환해야 합니다.이 시점에서 모든 항목을 단일 항목으로 읽을지 여부를 결정할 수 있습니다.Mono
와 함께bodyToMono
또는 물체의 흐름 속으로 (Flux
)와 함께bodyToFlux
예를 들어 응답이 개별 개별 Java 개체로 구문 분석할 수 있는 JSON 배열인 경우와 같습니다.
그러나, 당신의 경우, 당신은 JSON을 있는 그대로 보기를 원합니다.그래서 로 변환하는 것은String
충분합니다.당신은 그냥 사용할 것입니다.bodyToMono
그것은 a를 돌려줄 것입니다.Mono
물건.
WebClient webClient = WebClient.create();
String responseJson = webClient.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.exchange()
.block()
.bodyToMono(String.class)
.block();
사용하는 위치block()
응답 페이로드가 도착하여 구문 분석될 때까지 기다리다String
하지만 당신은 또한 할 수 있습니다.subscribe
에게Mono
완료되었을 때 반응적으로 받는 것.
한 가지 주의할 점은retrieve()
대신 사용할 수 있습니다.exchange()
단축키로ClientResponse
이 경우 기본 동작이 오류 응답을 처리하도록 합니다.사용.exchange()
응용 프로그램에서 오류 응답에 대한 모든 책임을 집니다.ClientResponse
자바독에서 더 읽어보세요.그retrieve()
버전은 다음과 같습니다.그럴 필요 없어요.block()
반응 데이터에만 관심이 있기 때문입니다.
WebClient webClient = WebClient.create();
String responseJson = webClient.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.retrieve()
.bodyToMono(String.class)
.block();
다과같요청다니합이음으로 요청하는 .RestTemplate
String json = new RestTemplate()
.getForEntity("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.getBody();
다과같요청다니합이음으로 요청하는 .requests
import requests
json = requests.get("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.content
다과같요청다니합이음으로 요청하는 .WebClient
String json = WebClient.create()
.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.exchange()
.block()
.bodyToMono(String.class)
.block();
언급URL : https://stackoverflow.com/questions/62822976/how-to-get-response-json-from-spring-webclient
'source' 카테고리의 다른 글
iOS 5 모범 사례(릴리스/유지?) (0) | 2023.07.01 |
---|---|
XlsxWriter를 사용하여 맨 위 행과 첫 번째 열을 고정하는 방법은 무엇입니까? (0) | 2023.07.01 |
각 루프의 현재 인덱스 찾기(Ruby) (0) | 2023.07.01 |
Oracle DB & SQL Developer: "Error report: execution completed with warning" - 경고를 보려면 어떻게 해야 합니까? (0) | 2023.07.01 |
"#define for if (false) {} other for"에 사용할 수 있는 것은 무엇입니까? (0) | 2023.07.01 |