
@ModelAttribute ์ผ์ด์ค@PostMapping
public ResponseEntity<?> uploadDoc(@ModelAttribute DocDto docDto, HttpSession session) { ... }
์ฌ๊ธฐ์ Spring MVC๋ HTTP ์์ฒญ ํ๋ผ๋ฏธํฐ(form-data, query string ๋ฑ)๋ฅผ DTO์ ๋งคํํฉ๋๋ค.
๋์ ๋ฐฉ์:
DocDto ๊ธฐ๋ณธ ์์ฑ์๋ก ๊ฐ์ฒด ์์ฑ๊ทธ๋์ @Setter๊ฐ ์์ผ๋ฉด ๊ฐ์ด ๋ค์ด๊ฐ์ง ์๊ณ , DTO์ ํ๋๊ฐ ๋ชจ๋ null์ด ๋ฉ๋๋ค.
์ฆ, @ModelAttribute์ ๋งคํํ๋ ค๋ฉด setter๊ฐ ํ์์ ๋๋ค.
์ด๊ฒ "Setter ์์ด ํ๋๊น ๋งคํ์ด ์๋๋๋ผ"์ ์ด์ ์ ๋๋ค. โ
@RequestBody ์ผ์ด์ค@PostMapping("/list")
public ResponseEntity<?> tbDocList(@RequestBody DocDto docDto) { ... }
์ฌ๊ธฐ์ Spring MVC๋ JSON ์์ฒญ ๋ฐ๋๋ฅผ DTO์ ๋งคํํฉ๋๋ค.
๋์ ๋ฐฉ์:
๋ฐ๋ผ์ setter๊ฐ ์์ด๋ ๋งคํ ๊ฐ๋ฅ, ๋จ @Builder์ @JsonDeserialize(builder=...)๋ฅผ ์ฌ์ฉํ๋ฉด builder ํจํด์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์.
๊ธฐ๋ณธ์ ์ผ๋ก Jackson์ reflection์ ์ฌ์ฉํด์ final์ด ์๋ ํ๋์ ๊ฐ์ ๋ฐ๋ก ๋ฃ์ ์๋ ์์ต๋๋ค.
๊ทธ๋์ RequestBody๋ Setter ์์ด๋ DTO์ ๋งคํ์ด ๋ ๊ฒ๋๋ค. โ
| ์ด๋ ธํ ์ด์ | ๊ฐ ๋ฐ์ธ๋ฉ ๋ฐฉ์ | DTO์ ํ์ํ ๊ฒ |
|---|---|---|
@ModelAttribute | ๊ธฐ๋ณธ ์์ฑ์ + setter ํธ์ถ | @Setter ํ์ |
@RequestBody | Jackson์ด JSON ์ฝ์ด ๊ฐ์ฒด ์์ฑ | setter ์์ด๋ OK, Builder ๊ฐ๋ฅ |
๐ก ํ ๋ฌธ์ฅ์ผ๋ก ์์ฝํ๋ฉด:
@ModelAttribute = setter ๊ธฐ๋ฐ ๋ฐ์ธ๋ฉ, @RequestBody = Jackson์ด ์ง์ DTO ๋งคํ