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을 만들 수 있음
- 인코딩 문제로 고생 안 함
❌ 단점:
- 모든 파라미터를 직접 인코딩해야 함 (실수 위험)
- +, % 등 특수문자 주의해야 함
이 방법이 구원이다.
'Back-end > SpringBoot' 카테고리의 다른 글
[Security] JWT란? (0) | 2025.05.24 |
---|---|
asynchronous? non-blocking? - WebClient (0) | 2025.05.01 |
Kotlin으로 OpenApi(Swagger)에서 multipart와 dto(vo) 같이 받는 법 (0) | 2025.02.10 |
[SpringBoot] security 간단 이론 (0) | 2025.01.15 |
[SpringBoot] webflux (2) | 2024.12.18 |