본문 바로가기

Java/Spring

RestTemplate Encoding

RestTemplate을 이용해 getForObject를 하다보면 http call이 잘된다.
하지만..


http://foo.com?bar=car&fooUrl=http://paramater?go=go&key=key
fooUrl을 그대로 전송하면 문제가 발생할 수 있으니 인코딩이 필요하다.

그런데 URL 쿼리스트링에 Encoding을 하게되면 문제가 발생한다.

getForObject에 Url을 String 타입으로 주게되면 내부적으로 또 Encoding을 하는 듯하다.
그렇다면...?

방법은 URI 객체 사용이다.
// Spring 내장 Utils 사용
String encodeFooUrl = UriUtils.encode("http://paramater?go=go&key=key", "UTF-8")
URI uri = new URI("http://foo.com?bar=car&fooUrl=" + encodeFooUrl);
로 uri를 만든 후 getForObject로 get 전송을 보내면 된다.
이 밖에 ..
MultiValueMap params = new LinkedMultiValueMap<>();
와 
UriComponents uri = UriComponentsBuilder.fromHttpUrl("http://sample.host").queryParams(params).build().encode("UTF-8");
uri.toUri();
UriComponents를 이용해 Uri 를 만들 수 있다.
둘의 차이는 : , / 기호도 encoding 하냐 안하느냐의 차이로 생각하면 된다.