- Spring 에서 제공하는
WebClient
로 HTTP 요청을 보낼 때, URL parameter를 전송하는 방법을 알아본다.
parameter 보내기#
webClient.get()
.uri(uriBuilder - > uriBuilder
.path("/products/")
.queryParam("name", "{name}")
.build("asdf+asdf"))
.retrieve()
.bodyToMono(String.class)
.onErrorResume(e -> Mono.empty())
.block();
- 위와 같이 작성하면
/products?name=asdf%2asdf
로 요청이 보내지는 것을 확인할 수 있다.
주의점#
- 아래와 같이 쿼리 파라미터를 넘기면 예상치 못한 방식으로 URL 인코딩이 될 수 있기 때문에 주의해야된다.
- 아래와 같이 요청을 보내면 ‘+’ 문자가 URL 인코딩 되지 않고 요청이 보내진다.
/products%3Fname=asdf+asdf
- 반대로 ‘?’ 문자는 인코딩 되어버린다.
webClient.get()
.uri("/products?name=asdf+asdf")
.retrieve()
.bodyToMono(String.class)
.onErrorResume(e -> Mono.empty())
.block();
- 아래와 같이 요청을 보내면 ‘+’ 문자가 URL 인코딩 되지 않고 요청이 보내진다.
webClient.get()
.uri(uriBuilder - > uriBuilder
.path("/products/")
.queryParam("name", "asdf+asdf")
.build())
.retrieve()
.bodyToMono(String.class)
.onErrorResume(e -> Mono.empty())
.block();
queryParam()
메서드의 javadoc을 읽어보면, 파라미터의 이름과 값 부분에 ‘=’, ‘&’, ‘+’ 같이 허용되지 않는 문자를 인코딩한다는 내용을 볼 수 있다.- ‘+‘를 인코딩하지 않고 요청을 보냈을 때 문제점
참고 자료#