Retrofit @Get, @Query 인코딩 문제 해결방법

Retrofit을 이용하여, 개발하던 중에 

쿼리가 인코딩되어 정상적인 주소가 아니게 되는 경우가 발생했다.

 

서울시 실시간 열차 위치 정보를 받아오고자 아래의 예시처럼 요청인자 "2호선"@Path를 이용하여 사용했다.

http://swopenapi.seoul.go.kr/api/subway/sample/xml/realtimePosition/0/5/2호선

 

하지만 결과적으로 아래와 같은 주소로  요청했다.

http://swopenapi.seoul.go.kr/api/subway/77517057686b79763530594254676d/json/realtimePosition/0/1000/2%ED%98%B8%EC%84%A0

 

결과적으로 [2호선 -> 2%ED%98%B8%EC%84%A0]  로 인코딩되는 결과가 발생했다.

 

이를 방지하기 위해,

@Query 또는 @Path문에서 encoded 를 true로 설정하는 방법이었다.

fun getResponse(@Path("subwayNm", encoded = true) subwayNm: String): Call<Seoul>

하지만, 이 방법으로도 해결을 하지 못했다. 

찾아보니 100% 해결되는 방법이 아니라고 했다. (나는 10번 시도 10번 실패.. )

 

그래서 구글링을 통해 찾아낸 방법은 @Url을 이용하여 동적 Url 사용하는 것이었다.

@GET
fun getInfo(@Url url : String) : Call<Seoul>

정상적으로 받아와졌다!!.