-
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
참고자료
'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