본문 바로가기
Java/Spring

[Spring]WebClient 파라미터 인코딩

by 오늘의개발부 2021. 1. 15.
반응형

공공 API 연동 중.
key값이 다르다는 500 응답이 날아왔다. 확인해보니 key는 문제가 없다.
내가 보낸 key를 서버에서 받아보니 내가 보낸 키와 다르다. 특수문자가 들어가있는데 인코딩 문제인 듯.

인코딩 없이 보냈을 때 문제가 됐던 코드

WebClient wc = WebClient.builder().baseUrl(API_URL).build();

        try {
            ResponseEntity<JSONObject> response = wc.get()
                                                .uri(uri -> uri.queryParam("ServiceKey", SERVICEKEY)
                                                               .queryParam("nx", PARAM_NX)
                                                               .queryParam("ny", PARAM_NY)
                                                               .queryParam("dataType", PARAM_DATATYPE)
                                                               .queryParam("base_date", "20210115")
                                                               .queryParam("base_time", "1700")
                                                               .build()
                                                        )
                                                .accept(MediaType.APPLICATION_JSON)
                                                .retrieve()
                                                .toEntity(JSONObject.class).block();

            System.out.println(response);

공식문서를 보니 uri나 parameter value를 인코딩 해주는 방법이 따로 있는 듯.

이렇게 인코딩모드를 추가했다.

DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(API_URL);
        factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
        WebClient wc = WebClient.builder().uriBuilderFactory(factory).baseUrl(API_URL).build();

인코딩 해주니 문제없이 데이터를 받아온다.

반응형