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 ๋์ ์๋ฆฌ

์ดํ๋ฆฌ์ผ์ด์ ์ด
RestTemplate
์ ์์ฑํ๊ณ , URI, HTTP Method ๋ฑ์ header ๋ด์ ์์ฒญRestTemplate
์HttpMessageConverter
๋ฅผ ์ฌ์ฉํ์ฌrequestEntity
๋ฅผ ์์ฒญ๋ฉ์ธ์ง๋ก ๋ณํRestTemplate
์ClientHttpRequestFactory
๋ก ๋ถํฐClientHttpRequest
๋ฅผ ๊ฐ์ ธ์ ์์ฒญClientHttpRequest
๋ ์์ฒญ๋ฉ์ธ์ง๋ฅผ ๋ง๋ค์ด HTTP ํ๋กํ ์ฝ์ ํตํด ์๋ฒ์ ํต์RestTemplate
๋ResponseErrorHandler
๋ก ์ค๋ฅ๋ฅผ ํ์ธResponseErrorHandler
๋ ์ค๋ฅ๊ฐ ์๋ค๋ฉดClientHttpResponse
์์ ์๋ต๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ฒ๋ฆฌ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?