본문 바로가기
Back-end/SpringBoot

RestTemplate를 사용 시에 encoding 이슈를 해결하는 방법

by backend 개발자 지망생 2025. 5. 1.

https://life.photogrammer.me/openapi-servicekey-encoding-problem/

 

공공 데이터 Open API 삽질기

공공 데이터 Open API 에서 Service Key 인코딩 문제 해결기

life.photogrammer.me


이 페이지를 참고하여 해결했다.

 

RestTemplate에서는 execute 시에 URL로 바꿔서 요청을 실행하는데, encoding 이슈가 계속 생겨서 service_key_not_registered가 나왔다..

따라서 encdoing 옵션을 없애주고, URI 객체를 그대로 넘기도록 설정해주니, 해결되는 것을 확인할 수 있었다.

 

       
        DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();
        uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
 
         String uriString = uriBuilderFactory.builder()
                .scheme("http")
                .host("apis.data.go.kr")
                .path(path)
                .queryParam("serviceKey", serviceKey)
                .queryParam("returnType", "json")
                .queryParam("numOfRows", "100")
                .queryParam("pageNo", "1")
                .queryParam("sidoName", encodedSidoName)
                .queryParam("ver", "1.0")
                .build()
                .toString();

        URI uri = URI.create(uriString);

 

흠... 이 방식은 내가 인코딩 할 값을 완벽히 책임지는 방식이다.

 

-> GPT햄은 이렇게 평하고 있다.

✔️ 장점:

  • 완전히 내 의도대로 URL을 만들 수 있음
  • 인코딩 문제로 고생 안 함

❌ 단점:

  • 모든 파라미터를 직접 인코딩해야 함 (실수 위험)
  • +, % 등 특수문자 주의해야 함

 

이 방법이 구원이다.