์คํ๋ง MVC์์๋ ํด๋ผ์ด์ธํธ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค๋ฌ์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ค์ํ ์ด๋ ธํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
์์ฒญ ๋ฐฉ์(GET/POST)๊ณผ ๋ฐ์ดํฐ ํํ(Form, JSON ๋ฑ)์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ์์ ์ ํํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
์ฒ๋ฆฌ ๋ฐฉ์ | ์ค๋ช | ์ฃผ์ ์ด๋ ธํ ์ด์ |
---|---|---|
์ฟผ๋ฆฌ์คํธ๋ง / ํผ ๋ฐ์ดํฐ | ๋๊ธฐ ๋ฐฉ์, URL ๋๋ form ๊ธฐ๋ฐ ์ ๋ฌ | @RequestParam |
JSON, ๋น๋๊ธฐ ๋ฐ์ดํฐ | ๋น๋๊ธฐ ์์ฒญ ์ ์ฌ์ฉ (Ajax ๋ฑ) | @RequestBody |
๊ฐ์ฒด ๋ฐ์ธ๋ฉ | DTO๋ก ํ๋ผ๋ฏธํฐ ์๋ ๋งคํ | @ModelAttribute |
URL ๊ฒฝ๋ก ๋ณ์ | RESTful URL์์ ๊ฐ ์ถ์ถ | @PathVariable |
@RequestParam
@GetMapping("/p02")
public void p02(@RequestParam(value = "name", required = true) String name) {
log.info("GET/param/p02..." + name);
}
@RequestBody
@PostMapping("/p04")
public void p04(@RequestBody String name) {
log.info("POST/param/p04..." + name);
}
@RequestParam
vs @RequestBody
๋น๊ต๊ตฌ๋ถ | @RequestParam | @RequestBody |
---|---|---|
๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์ | ์ฟผ๋ฆฌ์คํธ๋ง, ํผ ๋ฐ์ดํฐ(Form) | ์์ฒญ ๋ณธ๋ฌธ(Body) |
์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์ | GET, POST | POST, PUT, PATCH |
๋ฐ์ดํฐ ํํ | key=value | JSON, XML, Text |
์์ | ?name=Tom | { "name": "Tom" } |
@ModelAttribute
& @PathVariable
@GetMapping("/example")
public String example(
@RequestParam String name, // ์ฟผ๋ฆฌ์คํธ๋ง ๋๋ ํผ ๋ฐ์ดํฐ์์ 'name' ์ถ์ถ
@RequestBody(required = false) String jsonData, // ์์ฒญ ๋ณธ๋ฌธ(JSON ๋ฑ) ๋ฐ์ดํฐ ์์
@ModelAttribute PersonDto dto, // ํ๋ผ๋ฏธํฐ๋ฅผ DTO๋ก ์๋ ๋งคํ
@PathVariable(required = false) Long id // URL ๊ฒฝ๋ก ๋ณ์ ์ถ์ถ
) {
return "resultPage"; // ๋ทฐ ์ด๋ฆ ๋ฐํ
}
๐ก TIP
@RequestParam
์ GET/POST ํผ ์ฒ๋ฆฌ์ ์ต์ ํ@RequestBody
๋ JSON ๊ธฐ๋ฐ API ์ค๊ณ ์ ํ์- DTO ๋ฐ์ธ๋ฉ ์
@ModelAttribute
๋ฅผ ํ์ฉํ๋ฉด ๊น๋ํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
์์ฒญ ๋ฐฉ์๊ณผ ๋ฐ์ดํฐ ํํ์ ๋ฐ๋ผ ์ ์ ํ ์ด๋ ธํ ์ด์ ์ ์ ํํ๋ ๊ฒ์ด
์คํ๋ง ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ์ ํต์ฌ์ด๋ค!
@RequestParam
@RequestBody
@ModelAttribute
@PathVariable
๋จ์ํ ์ฌ์ฉ๋ฒ ์๊ธฐ๋ณด๋ค, ์ธ์ ์ด๋ค ์ด๋ ธํ ์ด์ ์ ์ ํํด์ผ ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์์ฒญ ๋ฐ์ดํฐ์ ํํ์ ๋ชฉ์ ์ ๊ณ ๋ คํด ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ ๊ฒ์ด ์ค๋ฌด์์์ ํต์ฌ ์คํฌ!