source

Spring Web Client에서 응답 json을 가져오는 방법

ittop 2023. 7. 1. 10:00
반응형

Spring Web Client에서 응답 json을 가져오는 방법

사용법에 대해 가장 간단한 튜토리얼을 따르려고 노력해 왔습니다.WebClient내가 이해하는 것은 다음으로 위대한 것입니다.RestTemplate.

예: https://www.baeldung.com/spring-5-webclient#4-getting-a-response

enter image description here

그래서 제가 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();

enter image description here

결과에서 어떻게 진행해야 할지 전혀 모르겠습니다.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

반응형