์ด์ ๊ธ์์ ํ์ ํ ๋ด์ฉ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ์๋ฉด @Controller ํด๋์ค์ ๊ฐ ๋ฉ์๋๋ (ํ์ํ ๊ฒฝ์ฐ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ Model์ View ๋ ๋๋ง์ ์ํ ์ ๋ณด๋ฅผ ๋ฃ์ด์ฃผ๊ณ ) ๋ ๋๋ง์ ์ฌ์ฉํ View name์ ๋ฐํํ๋ค. (๋์ ๋ฐ๋ผ ๋ค๋ฅธ View ์์ฒญ์ ์ํ ๋ฆฌ๋ค์ด๋ ํธ ์ฃผ์๋ฅผ ๋ฐํํ๊ธฐ๋ ํ๋ค.) Dispatcher Servlet์ @Controller์์ ๋ฐํ๋ฐ์ View name์ ๋ฐํ์ผ๋ก ๋ ๋๋งํ View๋ฅผ ์ฐพ๊ณ Model ์ ๋ณด๋ฅผ ์ด์ฉํด View๋ฅผ ๋ ๋๋งํ ๋ค Client์๊ฒ ๋ ๋๋งํ View๋ฅผ ๋ณด๋ด์ค๋ค.
Index View ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ. Index ํ์ด์ง์ ํด๋นํ๋ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋ ํ๋๋ง ์กด์ฌํ๋ค.
Pet Clinic์ ์ปจํธ๋กค๋ฌ ์ค ๊ฐ์ฅ ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. owner ๊ด๋ จ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ๋ค.
| Method | URI | ์ค๋ช |
|---|---|---|
| GET | /owners/new | owner ์ถ๊ฐ ํ์ด์ง ์์ฒญ |
| POST | /owners/new | owner ์ถ๊ฐ ์์ฒญ |
| GET | /owners/find | owner ์ฐพ๊ธฐ ํ์ด์ง ์์ฒญ |
| GET | /owners/ | owner ๋ฆฌ์คํธ ํ์ด์ง ์์ฒญ |
| GET | /owners/{ownerId}/edit | owner ์์ ํ์ด์ง ์์ฒญ |
| POST | /owners/{ownerId}/edit | owner ์์ ์์ฒญ |
| GET | /owners/{ownerId} | owner ์์ธ์ ๋ณด ํ์ด์ง ์์ฒญ |
public String initCreationForm(Map<String, Object> model)
owner ์ถ๊ฐ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋. Model์ ์ ๊ตณ์ด Owner ๊ฐ์ฒด๋ฅผ ์๋ก ๋ง๋ค์ด์ ๋ฃ์ด์ฃผ๋ ํ๋๋ ์ฌ๊ธฐ์ ๋ฆฌํดํ๋ View๊ฐ owner ์ถ๊ฐ, ์์ ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด์๋ค. ์๋ก ์์ฑํ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ฃผ๋ฉด View์์ ๋ ๋๋งํ ๋ input ํญ๋ชฉ์ default๋ก ๋ค์ด๊ฐ ์ ๋ณด๋ค์ด null์ด๊ธฐ ๋๋ฌธ์ ๊ฐ input ํญ๋ชฉ์ ๋น์ฐ๊ณ ๋ ๋๋งํ๋ค.
public String processCreationForm(@Valid Owner owner, BindingResult result)
Request Body๋ก ๋ค์ด์จ owner ์ ๋ณด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ์๋. owner ์ ๋ณด๋ฅผ ๊ฒ์ฆํ ํ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์ ๋ ฅํ ์ ๋ณด์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก owner ์ ๋ณด ์ ๋ ฅ View๋ก ๋๋์๊ฐ๊ณ , ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์ owner ์ ๋ณด๋ฅผ Database์ ์ ์ฅํ๋ค. ์ owner ์ ์ฅ ํ ์ ์ฅํ owner ์์ธ ์ ๋ณด ์กฐํ๋ฅผ ์ํ ์ฃผ์๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
public String initFindForm()
owner ์ฐพ๊ธฐ๋ฅผ ์ํ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋.
public String processFindForm(@RequestParam(defaultValue = "1") int page,
Owner owner, BindingResult result, Model model)
owner ์ฐพ๊ธฐ ํ์ด์ง์์ ์ ๋ ฅํ last name์ผ๋ก ํด๋นํ๋ owner๋ฅผ ์ฐพ๊ธฐ ์ํ ๋ฉ์๋. last name์ผ๋ก ์๋ฌด๊ฒ๋ ์ ๋ ฅํ์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋ owner๋ฅผ ์ฐพ๋๋ค. owner ๊ฒ์ ๊ฒฐ๊ณผ last name์ด ์ผ์นํ๋ owner๊ฐ 1๋ช ์ผ ๊ฒฝ์ฐ ํด๋น owner ์์ธ ์ ๋ณด ์กฐํ๋ฅผ ์ํ ์ฃผ์๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๊ณ , ์ฌ๋ฌ ๊ฑด์ผ ๊ฒฝ์ฐ ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ํ ํ owner ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ View๋ก ์ด๋ํ๋ค.
public String initUpdateOwnerForm(@PathVariable("ownerId") int ownerId, Model model)
ํน์ owner์ ์์ธ ์ ๋ณด ์์ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋. View๋ owner ์ถ๊ฐ์ ์ฌ์ฉํ๋ View์ ๊ฐ๋ค. {ownerID}์ ๋ง๋ ์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ Model์ ๋ฃ์ด์ค๋ค. Dispatcher Servlet์์ Model์ ๋ด๊ฒจ์๋ owner ์ ๋ณด๋ฅผ ์ด์ฉํด ์์ ํ owner ์ ๋ณด๋ฅผ View์ ๋ ๋๋งํ๋ค.
public String processUpdateOwnerForm(@Valid Owner owner, BindingResult result,
@PathVariable("ownerId") int ownerId)
Request Body๋ก ๋ค์ด์จ owner ์ ๋ณด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ ํ๊ธฐ ์ํ ๋ฉ์๋. owner ์ ๋ณด๋ฅผ ๊ฒ์ฆํ ํ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์ ๋ ฅํ ์ ๋ณด์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก owner ์ ๋ณด ์ ๋ ฅ View๋ก ๋๋์๊ฐ๊ณ , ์ค๋ฅ๊ฐ ์๋ค๋ฉด {ownerId}์ ํด๋นํ๋ owner๋ฅผ ์์ฒญ๊ณผ ํจ๊ป ๋ค์ด์จ ์ ๋ณด๋ก ์์ ํ๋ค. owner ๊ฐฑ์ ํ ํด๋น owner ์์ธ ํ์ด์ง ์กฐํ๋ฅผ ์ํ ์ฃผ์๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
public ModelAndView showOwner(@PathVariable("ownerId") int ownerId)
owner ์์ธ ์ ๋ณด ์กฐํ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋. {ownerId}์ ํด๋นํ๋ owner๋ฅผ ์ฐพ์ Model์ ๋ฃ์ด์ค๋ค. Dispatcher Servlet์ Model์ ๋ด๊ธด owner ์ ๋ณด๋ฅผ ํตํด View๋ฅผ ๋ ๋๋งํ๋ค.
pet ๊ด๋ จ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. @Controller ์ด๋ ธํ ์ด์ ๋ฐ์ @RequestMapping("/owners/{ownerId}") ์ด๋ ธํ ์ด์ ์ ํตํด ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ์ปจํธ๋กค๋ฌ์์ ์ฒ๋ฆฌํ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ค. ๊ธฐ๋ณธ ๊ฒฝ๋ก์ ๋ฉ์๋๋ณ ์ฒ๋ฆฌํ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด์ ์ฌ์ฉํ๋ค. ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ๋ค.
| Method | URI(/owners/{ownerId} + ) | ์ค๋ช |
|---|---|---|
| GET | /pets/new | pet ์ถ๊ฐ ํ์ด์ง ์์ฒญ |
| POST | /pets/new | pet ์ถ๊ฐ ์์ฒญ |
| GET | /pets/{petId}/edit | pet ์์ ํ์ด์ง ์์ฒญ |
| POST | /pets/{petId}/edit | pet ์์ ์์ฒญ |
public String initCreationForm(Owner owner, ModelMap model)
owner id๊ฐ {ownerId}์ธ owner์ pet์ ์ถ๊ฐํ๊ธฐ ์ํ ์ ๋ณด ์ ๋ ฅ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋. GET /owners/{ownerId}/pets/new ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์ด View ์ญ์ ์ถ๊ฐ, ์์ ๋ชจ๋์ ์ฌ์ฉ๋๋ฏ๋ก owner์ pet ๊ฐ์ฒด๋ฅผ ์๋ก ๋ง๋ค์ด owner์ ์ถ๊ฐํ ํ Model์ ๋ฃ์ด์ค๋ค.
public String processCreationForm(Owner owner, @Valid Pet pet,
BindingResult result, ModelMap model)
Request Body๋ก ๋ค์ด์จ pet ์ ๋ณด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ ํ๊ธฐ ์ํ ๋ฉ์๋. POST /owners/{ownerId}/pets/new ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. owner id๊ฐ {ownerId}์ ํด๋นํ๋ owner์ ์ pet์ ์ถ๊ฐํ๋ค. ์ด๋ฆ์ ๊ธธ์ด, ์ด๋ฆ ์ค๋ณต ์ฌ๋ถ ๋ฑ์ ๊ฒ์ฌํ์ฌ ์ด์์ด ์์ผ๋ฉด ๋ค์ pet ์ถ๊ฐ View๋ก ๋๋์๊ฐ๊ณ , ์ด์์ด ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐํ ๋ค ํด๋น owner ์์ธ ์ ๋ณด ์กฐํ๋ฅผ ์ํ ์ฃผ์๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
public String initUpdateForm(Owner owner, @PathVariable("petId") int petId, ModelMap model)
ํน์ owner์ ํน์ pet์ ์ ๋ณด ์์ ์ ์ํ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋. GET /owners/{ownerId}/pets/{petId}/edit ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. owner id๊ฐ {ownerId}์ธ owner์ pet id๊ฐ {petId}์ธ pet์ ์ ๋ณด๋ฅผ ์ฐพ์ Model์ ๋ด๋๋ค. Dispatcher Servlet์ ์ด ๋ฉ์๋๋ฅผ ํตํด ์ฐพ์ ์์ ํ pet์ ์ ๋ณด๋ฅผ View์ ๋ ๋๋งํ๋ค.
public String processUpdateForm(@Valid Pet pet, BindingResult result,
Owner owner, ModelMap model)
ํน์ owner์ ํน์ pet์ ์ ๋ณด๋ฅผ ์์ ํ๊ธฐ ์ํ ๋ฉ์๋. POST /owners/{ownerId}/pets/{petId}/edit ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. Request Body๋ก ๋์ด์จ pet์ ์ ๋ณด๋ฅผ ์ด์ฉํด owner id๊ฐ {ownerId}์ ํด๋นํ๋ pet id๊ฐ {petId}์ธ pet์ ์ ๋ณด๋ฅผ ์์ ํ๋ค. ๋ฐ์์จ pet ์ ๋ณด์ ์ค๋ฅ๊ฐ ์์ผ๋ฉด pet ์ ๋ณด ์์ View๋ก ๋๋์๊ฐ๊ณ , ์์ผ๋ฉด ํด๋น owner ์์ธ ์ ๋ณด View๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
visit ๊ด๋ จ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ๋ค.
| Method | URI | ์ค๋ช |
|---|---|---|
| GET | /owners/{ownerId}/pets/{petId}/visits/new | visit ์ถ๊ฐ ํ์ด์ง ์์ฒญ |
| POST | /owners/{ownerId}/pets/{petId}/visits/new | visit ์ถ๊ฐ ์์ฒญ |
public String initNewVisitForm()
๋ฐฉ๋ฌธ ์ ๋ณด ์ ๋ ฅ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋. ์ด View๋ visit ์ถ๊ฐ, ์์ ์ ๋ชจ๋ ์ฌ์ฉ๋ ์ ์์ผ๋ ์ถ๊ฐ ๊ธฐ๋ฅ๋ง ๊ตฌํ๋์ด ์๋ค. ์์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด ๋ฉ์๋ ๋ด์ฉ๊ณผ html ํ์ผ ๋ชจ๋ ์์ ํด์ผ ํ๋ค.
public String processNewVisitForm(@ModelAttribute Owner owner, @PathVariable int petId,
@Valid Visit visit, BindingResult result)
Request Body๋ฅผ ํตํด ๋ค์ด์จ ๋ฐฉ๋ฌธ ์ ๋ณด๋ฅผ ์ด์ฉํด ํด๋น pet์ ๋ฐฉ๋ฌธ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐํ๊ธฐ ์ํ ๋ฉ์๋. owner id๊ฐ {ownerId}์ธ owner์ pet id๊ฐ {petId}์ธ pet์ ๋ฐฉ๋ฌธ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ๋ฐ์์จ ์ ๋ณด์ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ฐฉ๋ฌธ ์ ๋ณด ์ ๋ ฅ View๋ก ๋๋์๊ฐ๊ณ , ์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ํ ํด๋น owner ์์ธ ์ ๋ณด ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
vet ๊ด๋ จ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ๋ค.
| Method | URI | ์ค๋ช |
|---|---|---|
| GET | /vets.html | vet ๋ชฉ๋ก ์กฐํ ํ์ด์ง ์์ฒญ |
| GET | /vets | vet ๋ชฉ๋ก ์์ฒญ |
๋ ์์ฒญ ๋ชจ๋ Veterinarian์ ๋ชฉ๋ก ์กฐํ๋ฅผ ์ํ ์์ฒญ์ด์ง๋ง, ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
public String showVetList(@RequestParam(defaultValue = "1") int page, Model model)
Veterinarian์ ๋ชฉ๋ก์ ์ถ๋ ฅํด ์ฃผ๋ View name์ ๋ฆฌํดํ๋ ๋ฉ์๋. ModelAndView ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ Veterinarian์ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ View๋ฅผ ๋ณด๋ด์ค๋ค. Dispatcher Servlet์ ์ด ๋ฉ์๋๋ฅผ ํตํด Veterinarian์ ๋ชฉ๋ก์ ์ฝ์ด์ ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ํ ๋ค View๋ฅผ ๋ ๋๋งํ ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด์ค๋ค.
public @ResponseBody Vets showResourcesVetList()
Veterinarian์ ๋ชฉ๋ก์ ๋ฆฌํดํด์ฃผ๋ ๋ฉ์๋. ๋ฐ๋ก View๋ฅผ ๋ ๋๋งํด์ ๋ณด๋ด์ฃผ๋ ๊ฒ์ด ์๋ ๋ชฉ๋ก์ ๋ณด๋ด์ฃผ๋ ์ญํ ์ ํ๋ค. ๋ฐ์ดํฐ๋ฅผ parsing ํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ์์ฒญ์ด๋ค. ์ด ๋ฉ์๋์ ๋ฆฌํด๊ฐ์ Veterinarian์ ๋ชฉ๋ก์ด ๋ด๊ธด ๊ฐ์ฒด๋ฅผ XML ํ์ผ ํํ๋ก ๋๊ธด๋ค.
์ค๋ฅ ํ์ด์ง ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ๋ค.
| Method | URI | ์ค๋ช |
|---|---|---|
| GET | /oups | ์ค๋ฅ ํ์ด์ง ์์ฒญ |
public String triggerException()
์ค๋ฅ ํ์ด์ง ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋. Runtime Exception์ ๋ฐ์์ํจ๋ค. Runtime Exception์ด ๋ฐ์ํ๋ฉด Dispatcher Servlet์ ๋ด๋ถ์ ์ผ๋ก '/error' ์์ฒญ์ ๋ฐ์์์ผ ํด๋ผ์ด์ธํธ์๊ฒ error.html์ ์ ํด์ค๋ค. Runtime Exception์ด ๋ฐ์ํ ๋ error message๋ฅผ ์ค์ ํด ์ฃผ๋ฉด error.html์ ํด๋น error message๋ฅผ ๋ ๋๋งํ๊ณ ๋ณด๋ด์ค๋ค.
Pet Clinic์์๋ @Controller์ ๋ฉ์๋ ์ด๋ฆ์ ์์ฑํ ๋์ naming convention์ ๋ค์๊ณผ ๊ฐ๋ค.
| Method name | ์ค๋ช |
|---|---|
| init{ํ์}Form(Creation, Find ๋ฑ) | ์ถ๊ฐ๋ฅผ ์ํ View ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋ |
| process{ํ์}Form(Creation, Find ๋ฑ) | ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋(์ ์ฅ, ์ฐพ๊ธฐ ๋ฑ) |
| initUpdate{๋์}Form | ๋์ ์์ ์ ์ํ View ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋ |
| processUpdate{๋์}Form | ๋์ ์์ ์ ์ํ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋ |
| show{๋์} | ๋์ ์กฐํ๋ฅผ ์ํ View ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋ |
@Controller ๋ฉ์๋๋ฅผ ๋ถ์ํ๋ฉฐ ํ ๊ฐ์ง View๋ฅผ ์ด์ฉํด ์ถ๊ฐ, ์์ ์ ๋ชจ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค. xmlํ์ผ๋ก ๋ชฉ๋ก์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ๋ ๋ฐฐ์ธ ์ ์์๋ค. ๋ํ, Controller ๋จ์ naming convention๊ณผ ์ด๋๊น์ง๋ฅผ Controller์์ ์ฒ๋ฆฌํ๋์ง์ ๋ํ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ํ์ ํ ์ ์์๋ค.(Request Mapping, ํ์ด์ง ์ฒ๋ฆฌ, Request Body๋ก ๋ค์ด์ค๋ Model Attribute๋ฅผ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ, View ๋ ๋๋ง์ ์ํ Model์ ๊ฐ์ฒด ์ถ๊ฐ ๋ฑ๋ฑ..) ๋ค์ ๊ธ์์๋ Pet Clinic์ Repository ๋ถ์์ ๋ํด ๋ค๋ฃฐ ์์ ์ด๋ค. ์ง๊ธ์ ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ํ์ฉํ๋ ๋ฅ๋ ฅ์ ๊ธฐ๋ฅด๋ ๊ฒ์ด ๋ ํ์ํ ๊ฒ ๊ฐ์ง๋ง.. ์ด์ ์์ํ์ผ๋๊น.. ๋์ ๋ณด๊ณ ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ๋ค. ์ผ๋ฅธ ํ๊ณ ํ๋ก์ ํธ ๋ค์ด๊ฐ์ผ์ง...!
@XmlElement ์ค๋ช
-
https://fordeveloper2.tistory.com/7584?category=360944