๐ก POST ์์ฒญ์ด๋?
- ์๋ฒ์ ์์ฒญํ๋ ๋ฐฉ์
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ํ ๋ ์ ๊ณตํด์ผํ๋ ์์์ด ์์ ๋
- Get๋ฐฉ์์ ์์ฒญํ๋ ์์์ URL์ ๋ค์ ๋ณด๋ด๋ ๋ฐ๋ฉด
- POST๋ฐฉ์์ URL์ ๋ถ์ด์ง ์๊ณ ๋ฐ๋ก ๋ฐ์ดํฐ(Body)๋ฅผ ๋ง๋ค์ด ๋ณด๋ธ๋ค.
๐ Spring Framework์์ POST ์์ฒญ ํ๊ธฐ
1. Body ๋ง๋ค๊ธฐ
Body๋ ๋ณดํต key, value์ ์์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์๋ฐ์์ ์ ๊ณตํด์ฃผ๋ MultiValueMap ํ์ ์ ์ฌ์ฉํด์ผํ๋ค.
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add('')
MultiValueMap ํ์ ์ผ๋ก ๋ง๋ค์ด์ค ๋ณ์์ add()๋ฅผ ์ฌ์ฉํด ๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ค๋ค.
2. Header ๋ง๋ค๊ธฐ
HTTP POST๋ฅผ ์์ฒญํ ๋ ๋ณด๋ด๋ ๋ฐ์ดํฐ(Body)๋ฅผ ์ค๋ช ํด์ฃผ๋ ํค๋(Header)๋ ๋ง๋ค์ด์ ๊ฐ์ด ๋ณด๋ด์ค์ผ ํ๋ค.
HttpHeaders headers = new HttpHeaders();
headers.add("");
Spring Framework์์ ์ ๊ณตํด์ฃผ๋ HttpHeaders ํด๋์ค๋ Header๋ฅผ ๋ง๋ค์ด์ค๋ค.
add()๋ฅผ ์ฌ์ฉํด Header์ ๋ค์ด๊ฐ ๋ด์ฉ์ ์ถ๊ฐํด์ฃผ์.
3. ์์ฒญํ๊ธฐ ์ํด ํค๋(Header)์ ๋ฐ์ดํฐ(Body) ํฉ์น๊ธฐ
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(params, headers);
Spring Framework์์ ์ ๊ณตํด์ฃผ๋ HttpEntity ํด๋์ค๋ Header์ Body๋ฅผ ํฉ์ณ์ค๋ค.
4. POST ์์ฒญํด๋ณด๊ธฐ
RestTemplate rt = new RestTemplate();
ResponseEntity<String> response = rt.exchange(
"https://{์์ฒญํ ์๋ฒ ์ฃผ์}", //{์์ฒญํ ์๋ฒ ์ฃผ์}
HttpMethod.POST, //{์์ฒญํ ๋ฐฉ์}
entity, // {์์ฒญํ ๋ ๋ณด๋ผ ๋ฐ์ดํฐ}
String.class {์์ฒญ์ ๋ฐํ๋๋ ๋ฐ์ดํฐ ํ์
}
);
Spring Framework์์๋ ์๋ฒ์ ์์ฒญ์ ํธํ๊ฒ ํ๊ธฐ ์ํ RestTemplate ํด๋์ค๋ฅผ ์ ๊ณตํด์ค๋ค.
๐ RestTemplate์ด๋?
The RestTemplate offers templates for common scenarios by HTTP method, in addition to the generalized exchange and execute methods that support of less frequent cases.
HTTP ๋ฉ์๋์ ์ํ ํ๋ฒํ ๊ธฐ๋ฅ ํ ํ๋ฆฟ์ ์ ๊ณตํด์ฃผ๊ณ , ๋ ๋์๊ฐ ํน๋ณํ ์ผ์ด์ค๋ฅผ ์ง์ํ๋ exchange์ execute ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ค๋ค.
exchage() : ๋ชจ๋ HTTP ์์ฒญ ๋ฉ์๋๋ฅผ ์ง์ํ๋ฉฐ ์ํ๋ ์๋ฒ์ ์์ฒญ์์ผ์ฃผ๋ ๋ฉ์๋
response์ ์๋ฒ์์ ์๋ตํด์ค ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ฒ์ด๋ค.