restTemplate

Spring 3.0 ๋ถ€ํ„ฐ ์ง€์›

HTTP ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  RESTful ์›์น™์„ ์ง€ํ‚ค๋Š” HTTP ํ†ต์‹  template์ด๋‹ค. RESTful ํด๋ผ์ด์–ธํŠธ๋Š” HTTP Method(GET, POST, PUT, DELETE, HEAD, OPTIONS)๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, Converter๋ฅผ ์ด์šฉํ•ด Object๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Synchronous API

  • ๊ธฐ๊ณ„์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์ค€๋‹ค.

RestTemplate์€ org.springframework.http.client ํŒจํ‚ค์ง€์— ์žˆ์œผ๋ฉฐ, HttpClient ๋ฅผ ์ถ”์ƒํ™”ํ•ด์„œ HttpEntity์˜ json, xml ๋“ฑ ์ œ๊ณตํ•ด์ค€๋‹ค.

RestTemplate ๋™์ž‘ ์›๋ฆฌ

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=http%3A%2F%2Fcfile26.uf.tistory.com%2Fimage%2F99300D335A9400A52C16C1
  1. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด RestTemplate์„ ์ƒ์„ฑํ•˜๊ณ , URI, HTTP Method ๋“ฑ์˜ header ๋‹ด์•„ ์š”์ฒญ

  2. RestTemplate ์€ HttpMessageConverter ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ requestEntity ๋ฅผ ์š”์ฒญ๋ฉ”์„ธ์ง€๋กœ ๋ณ€ํ™˜

  3. RestTemplate ์€ ClientHttpRequestFactory ๋กœ ๋ถ€ํ„ฐ ClientHttpRequest ๋ฅผ ๊ฐ€์ ธ์™€ ์š”์ฒญ

  4. ClientHttpRequest ๋Š” ์š”์ฒญ๋ฉ”์„ธ์ง€๋ฅผ ๋งŒ๋“ค์–ด HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํ†ต์‹ 

  5. RestTemplate ๋Š”ResponseErrorHandler ๋กœ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธ

  6. ResponseErrorHandler ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ClientHttpResponse ์—์„œ ์‘๋‹ต๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ฒ˜๋ฆฌ

  7. RestTemplate ๋Š” HttpMessageConverter ๋ฅผ ์ด์šฉํ•ด ์‘๋‹ต๋ฉ”์„ธ์ง€๋ฅผ java object(Class responseType) ๋กœ ๋ณ€ํ™˜

Method

Method

HTTP

์„ค๋ช…

exchange

any

HTTP header setting ๊ฐ€๋Šฅ, ResponseEntity๋กœ ๋ฐ˜ํ™˜

execute

any

Request/Response ์ฝœ๋ฐฑ์„ ์ˆ˜์ • ๊ฐ€๋Šฅ

getForObject

GET

Java Object๋กœ ๋ฐ˜ํ™˜

getForEntity

GET

ResponseEntity๋กœ ๋ฐ˜ํ™˜

postForLocation

POST

java.net.URI ๋กœ ๋ฐ˜ํ™˜

postForObject

POST

Java Object๋กœ ๋ฐ˜ํ™˜

postForEntity

POST

ResponseEntity๋กœ ๋ฐ˜ํ™˜

delete

DELETE

HTTP DELETE ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰

headForHeaders

HEAD

ํ—ค๋”์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉด HTTP HEAD ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ

put

PUT

HTTP PUT ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰

patchForObject

PATCH

HTTP PATCH ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰

optionsForAllow

OPTIONS

์ฃผ์–ด์ง„ URL ์ฃผ์†Œ์—์„œ ์ง€์›ํ•˜๋Š” HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์กฐํšŒ

์˜ˆ์ œ

๊ทธ ์ค‘์— HTTP header๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” exchange ์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

// Header ์„ค์ •
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON); // application/json
headers.set("apikey", "apikeyvalue");                             // API์— ๋”ฐ๋ผ key ๊ฐ’์„ ์„ค์ •

๋‹ค์Œ๊ณผ ๊ฐ™์ด HttpHeaders ๋กœ header ๊ฐ’๋“ค์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. headers๋Š” HttpEntity์— ๋ณด๋‚ด์ค„ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํ•จ๊ป˜ ์„ค์ •ํ•ด์ค€๋‹ค.

UricomponentsBuilder ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•ด ํ•˜๋‚˜์˜ URI๋กœ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

// example : https://example.api.com/m/item?channelCode=30001001&count=3
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://example.api.com");
builder.path("/m/item")
           .queryParam("channelCode", "30001001")
           .queryParam("count", 3);

String apiUrl = builder.build().encode().toUriString();

requestBody ๊ฐ’์œผ๋กœ ๋ณด๋‚ด์ค„ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์€ Map<> ์œผ๋กœ ๊ฐ์ž ๋ฐ์ดํ„ฐ ํ˜•ํƒœ์— ๋งž๊ฒŒ ์ƒ์„ฑํ•ด์ค€๋‹ค.

// ajax ํ†ต์‹ ์‹œ data์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’
Map<String, Object> requestBody = new HashMap<String, Object>();
requestBody.put("category_type", categoryType);

์ด์ œ HttpEntity ์— headers์™€ requestBody ๊ฐ์ฒด๋ฅผ ๋‹ด์•„์ค€๋‹ค.

HttpEntity<Map<String, Object>> sendData = new HttpEntity<>(requestBody, headers);

๋งŒ์•ฝ timeout์„ ์„ค์ •ํ•˜๋ ค๋ฉด HttpComponentsClientHttpRequestFactory ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setConnectTimeout(3000); // 3์ดˆ
factory.setReadTimeout(3000); // 3์ดˆ

RestTemplate ์œผ๋กœ ์ด์ œ HTTP ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(factory);    // timeout ์„ค์ •

ResponseEntity<Map> response = restTemplate.exchange(apiUrl, HttpMethod.POST, sendData, Map.class);

์ฐธ์กฐ ํŽ˜์ด์ง€

Last updated

Was this helpful?