-
RestTemplate Get Request - RestTemplate Hands On 3Spring Framework/RestTemplate 2023. 9. 23. 00:01반응형
개요
이전의 RestTemplate Get Request 파라미터 없는 요청에 대한 응답위주로 다루었다면 이번글은 QueryParam, PathVariable, Header 등 요청에 필요한 부가정보들을 어떻게 활용할 수 있는지 알아보고자 합니다.
QueryParam 호출해보기
@GetMapping("/query-test-call") fun getQueryParamCall(@RequestParam param: Map<String, String>): String { println(param) return "query" }
Map으로 QueryParamater를 받는 api를 하나 준비했습니다.
RestTemplate으로 queryParam 인자로 넘겨 호출하기
@GetMapping("/query-test") fun getQueryParam(): String { val apiPath = "/query-test-call" val restTemplate = RestTemplate() val url = UriComponentsBuilder .fromHttpUrl(baseUrl + apiPath) .queryParam("userId", 1) .queryParam("id", 2) .toUriString() val responseEntity = restTemplate.getForEntity(url, String::class.java) println(responseEntity.body) return "query" }
호출하는 부분에서는 UriComponentsBuilder를 활용합니다.
UriComponentsBuilder는 UriComponents를 만들기 위해 사용됩니다.
UriComponent는 Spring framework의 클래스중 하나로 3.1부터 사용할 수 있습니다, 불변한 URI와 동일한 역할을 수행하지만 인코딩이나 변수지정이 용이합니다.
위의 예제를 보면 queryParam 메서드로 원하는 파라미터를 세팅할 수 있으며, 내부적으로는 linked MultiValueMap가 활용됩니다.
호출결과
{userId=1, id=2}
userId와 id 인자가 잘 전달된 것을 볼 수 있습니다.
PathVariable 호출해 보기
RestTemplate으로 PathVariable 호출하는 코드
@GetMapping("/path-test") fun getPathVariable(): String { val apiPath = "/path-test-call/{user-id}" val restTemplate = RestTemplate() val url = UriComponentsBuilder .fromHttpUrl(baseUrl + apiPath) .buildAndExpand("1") .toUriString() val responseEntity = restTemplate.getForEntity(url, String::class.java) println(responseEntity.body) return "param" }
apiPath부분에서 {user-id} 부분을 작성해 주고 buildAndExpand메서드를 활용하여 세팅이 수행됩니다.
PathVariable 호출할 수 있는 api 준비
@GetMapping("/path-test-call/{user-id}") fun getPathVariableCall(@PathVariable(value = "user-id") userId: String): String { return userId }
호출결과
1
user-id가 1로 전달된 모습을 확인할 수 있습니다.
Header 담아 호출해 보기
@GetMapping("/header-test") fun getHeader(): String { val apiPath = "/header-test-call" val restTemplate = RestTemplate() val headers = HttpHeaders() headers.set("user-id", "12314") headers.set("my-header", "my-header") val request: HttpEntity<*> = HttpEntity<Any?>(headers) val url = UriComponentsBuilder .fromHttpUrl(baseUrl + apiPath) .toUriString() val responseEntity = restTemplate.exchange( url, HttpMethod.GET, request, String::class.java ) return responseEntity.body!! } @GetMapping("/header-test-call") fun getHeaderCall(@RequestHeader(value = "user-id") userId: String): String { return userId }
위의 코드들과 다른 점은 getForEntity대신에 HttpEntity를 넘기기 위해서 exchange 메서드를 활용합니다.
HttpHeaders 클래스를 통해 전달하고 싶은 헤더를 세팅할 수 있습니다.
호출결과
12314
참고자료
UriComponentsBuilder (Spring Framework 6.0.11 API)
Request to have the URI template pre-encoded at build time, and URI variables encoded separately when expanded. In comparison to UriComponents.encode(), this method has the same effect on the URI template, i.e. each URI component is encoded by replacing no
docs.spring.io
'Spring Framework > RestTemplate' 카테고리의 다른 글
RestTemplate Timeout - ResetTemplate Hands On 7 (0) 2023.09.28 RestTemplate Error Handling - RestTemplate Hands On 6 (0) 2023.09.27 RestTemplate Post Request - RestTemplate Hands On 4 (0) 2023.09.24 RestTemplate Get Request - RestTemplate Hands On 2 (0) 2023.09.21 RestTemplate이란? - RestTemplate Hands On 1 (0) 2023.09.20