RestTemplete으로 불러왔던 외부 api를 WebClient로 불러옴
기존 코드
RestTemplate restTemplate = new RestTemplate();
String apiUrl = "<https://nickname.hwanmoo.kr/?format=json&count=1>";
ResponseEntity<String> response = restTemplate.getForEntity(apiUrl, String.class);
WebClient webClient = WebClient.create(); // 별도의 설정 없이 생성
String apiUrl = "<https://nickname.hwanmoo.kr/?format=json&count=1>";
String response = webClient.get()
.uri(apiUrl)
.retrieve() // ClientResponse 개체의 body를 받아 디코딩하고, 사용자가 사용할 수 있도록 미리 만든 개체를 제공하는 간단한 메소드
.bodyToMono(String.class) // retrieve에서 응답을 받아오는 방법 설정 - 해당 설정은 헤더를 제외한 body 값만 받음
.block(); // 동기식 스타일 일반 객체로 받을 수 있음
WebClient.create("<http://localhost:8080>");
String apiUrl = "<https://nickname.hwanmoo.kr/?format=json&count=1>";
WebClient webClient = WebClient.create(apiUrl);
String response = webClient.get()
// .uri(apiUrl)
.retrieve() // ClientResponse 개체의 body를 받아 디코딩하고, 사용자가 사용할 수 있도록 미리 만든 객체를 제공하는 간단한 메소드
.bodyToMono(String.class) // retrieve에서 응답을 받아오는 방법 설정 - 해당 설정은 헤더를 제외한 body 값만 받음
.block(); // 동기식 스타일 일반 객체로 받을 수 있음
// JSON 형식의 문자열인 response를 JsonNode로 파싱하기 위한 과정
ObjectMapper objectMapper = new ObjectMapper();
// String response를 JsonNode로 변경
JsonNode jsonNode = objectMapper.readTree(response);
// "words" 키에 해당하는 값을 추출
JsonNode wordsNode = jsonNode.get("words");
log.info(String.valueOf(wordsNode)); // ["Fun cool sexy 더블모니터"]
// JsonNode를 String으로 변환
String firstWord = wordsNode.get(0).asText(); // toString()과 동일하지만, asText는 JsonNode의 추상 메소드
// toString() 결과 : "\\"보청기를 낀 미소천사\\"" -> 제대로 실행되지 않음
// DB에서 String으로 한 번 더 감싸진 것 확인 가능
log.info(String.valueOf(wordsNode.get(0))); // "Fun cool sexy 더블모니터"
ObjectMapper
**를 사용하여 해당 JSON 문자열을 **JsonNode
**로 파싱합니다. 이제 코드는 이 **JsonNode
**를 사용하여 JSON 데이터를 조작하거나 원하는 정보를 추출할 수 있게 됩니다.