open api 사용법 찾아보기
webClient를 내 프로젝트에 적용하는 과정을 정리해봐야 한다
내가 사용할 open api의 샘플 코드
/* Java 1.8 샘플 코드 */
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.IOException;
public class ApiExplorer {
public static void main(String[] args) throws IOException {
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/6440000/Cn100Mt/getList"); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=서비스키"); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("10", "UTF-8")); /*한 페이지당 표출 데이터 수*/
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지 번호*/
urlBuilder.append("&" + URLEncoder.encode("searchNm","UTF-8") + "=" + URLEncoder.encode("", "UTF-8")); /*검색할 산 이름*/
urlBuilder.append("&" + URLEncoder.encode("searchArea","UTF-8") + "=" + URLEncoder.encode("", "UTF-8")); /*지역코드 (기술문서참조)*/
urlBuilder.append("&" + URLEncoder.encode("searchSeason","UTF-8") + "=" + URLEncoder.encode("", "UTF-8")); /*계절코드 (SESS1 = 봄, SESS2 = 여름, SESS3 = 가을, SESS4 = 겨울)*/
urlBuilder.append("&" + URLEncoder.encode("searchTheme","UTF-8") + "=" + URLEncoder.encode("TEME1", "UTF-8")); /*테마코드 (기술문서참조)*/
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
System.out.println("Response code: " + conn.getResponseCode());
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
System.out.println(sb.toString());
}
}
이 샘플 코드를 webClient를 적용한 형태로 바꿔볼건데,
의존성 추가
dependencies를 추가한다
implementation 'org.springframework.boot:spring-boot-starter-webflux'
인스턴스 생성
webClient의 인스턴스 생성 방법은 두가지
// 기본 설정으로 생성
WebClient webclient = WebClient.create();
// base url을 추가하여 생성
WebClient webclient = WebClient.create("http://localhost:8080);
WebClient client3 = WebClient.builder()
.baseUrl("http://localhost:8080")
.defaultCookie("cookieKey", "cookieValue")
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
builder에 들어갈 수 있는 옵션
// uribuild 설정을 도와주는 DefaultUriBUilderFactory 호출
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(BASE_URL);
// 인코딩 모드 설정
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
WebClient webClient = WebClient.builder()
.uriBuilderFactory(factory)
.baseUrl(BASE_URL)
.build();
인코딩 모드 종류들
String response = webClient.get()
.uri(uriBuilder -> uriBuilder
.queryParam("serviceKey", serviceKey)
.queryParam("upkind", upkind)
.queryParam("upr_cd", upr_cd)
.queryParam("state", state)
.queryParam("pageNo", pageNo)
.queryParam("NumOfRows", NumOfRows)
.queryParam("_type", _type)
.build())
.retrieve()
.bodyToMono(String.class)
.block();