restTemplate
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
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
์ ์์ฑํ๊ณ , URI, HTTP Method ๋ฑ์ header ๋ด์ ์์ฒญ
RestTemplate
์ HttpMessageConverter
๋ฅผ ์ฌ์ฉํ์ฌ requestEntity
๋ฅผ ์์ฒญ๋ฉ์ธ์ง๋ก ๋ณํ
RestTemplate
์ ClientHttpRequestFactory
๋ก ๋ถํฐ ClientHttpRequest
๋ฅผ ๊ฐ์ ธ์ ์์ฒญ
ClientHttpRequest
๋ ์์ฒญ๋ฉ์ธ์ง๋ฅผ ๋ง๋ค์ด HTTP ํ๋กํ ์ฝ์ ํตํด ์๋ฒ์ ํต์
RestTemplate
๋ResponseErrorHandler
๋ก ์ค๋ฅ๋ฅผ ํ์ธ
ResponseErrorHandler
๋ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ClientHttpResponse
์์ ์๋ต๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ฒ๋ฆฌ
RestTemplate
๋ HttpMessageConverter
๋ฅผ ์ด์ฉํด ์๋ต๋ฉ์ธ์ง๋ฅผ java object(Class responseType) ๋ก ๋ณํ
Method
HTTP
์ค๋ช
exchange
any
HTTP header setting ๊ฐ๋ฅ, ResponseEntity๋ก ๋ฐํ
execute
any
Request/Response ์ฝ๋ฐฑ์ ์์ ๊ฐ๋ฅ
getForObject
GET
Java Object๋ก ๋ฐํ
getForEntity
๊ทธ ์ค์ 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);
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 ๋ฉ์๋๋ฅผ ์กฐํ