๊ฒฝ์ฐ์ ๋ฐ๋ผ ํผ์ ๋น์ทํ์ง๋ง ๊ฒ์ฆ ๋ก์ง์ด๋ ๊ฒ์ฆ ๋ฉ์์ง๋ฅผ ๋ค๋ฅด๊ฒ ํด์ผ ํ ์ ์์ต๋๋ค.
์ํ ๋ฑ๋ก ํผ
๊ณผ ์ํ ์์ ํผ
์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณผ๊ป์.
์ํ ๋ฑ๋ก ํผ
์ ๊ฒฝ์ฐ ์ํ์ ์๋์ 100๊ฐ ์ดํ๋ก ์
๋ ฅํ์ง ๋ชปํ๊ฒ ํ๊ณ ์ํ ์์ ํผ
์ ๊ฒฝ์ฐ ์๋์ ์ ํ์ด ์๋ค๊ณ ํ๋ค๋ฉด ์๋ก ๋ค๋ฅธ ๊ฒ์ฆ๋ก์ง์ด ๋์ํด์ผ ๋ฉ๋๋ค.
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ํ ๋ฑ๋ก ํผ
๊ณผ ์ํ ์์ ํผ
์ groups
๋ฅผ ์ ์ฉํ์ฌ ๊ฒ์ฆ ๋ก์ง์ ๋ถ๋ฆฌํด๋ณผ๊ป์.
๋ ๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค.
๊ตฌ๋ถ์ ์ํ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ๋ด์ฉ์ ํ์ ์์ต๋๋ค.
ItemSaveRequest
ItemUpdateRequest
Item
ํด๋์ค๋ฅผ ์ ์ํฉ๋๋ค.
groups
๋ฅผ ์ด์ฉํด์ ๋ฑ๋ก์(ItemSaveRequest)์ ์์ ์(ItemUpdateRequest) ์ ์ฉ๋ ๊ฒ์ฆ๋ก์ง์ ๊ตฌ๋ถํ์์ต๋๋ค.@Data
public class Item {
@NotNull(groups = {ItemUpdateRequest.class})
private Long id;
@NotEmpty(message = "์ํ๋ช
์ ์
๋ ฅํด์ฃผ์ธ์.")
private String itemName;
@NotNull
@Range(min=1000, max=1000000)
private Integer price;
@NotNull
@Range(min=100, groups = {ItemSaveRequest.class})
private Integer quantity;
}
Controller
์ธก์์ ์ด๋ค ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ ์ง ๋ช
์ํด์ฃผ์ด์ผ ํฉ๋๋ค.
@Validated
์ valueํ๋ผ๋ฏธํฐ์ ๊ตฌ๋ถ์(์ธํฐํ์ด์ค)๋ฅผ ์ง์ ํฉ๋๋ค.@Slf4j
@Controller
@RequestMapping("/test")
public class TestController {
@GetMapping
public String form(@ModelAttribute Item item) {
return "form";
}
@PostMapping
public String add(
@Validated(value = ItemSaveRequest.class) @ModelAttribute Item item, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
log.info("binding result = {}", bindingResult);
return "form";
}
log.info("****** ๋น์ฆ๋์ค๋ก์ง ์ํ ********");
return "form";
}
@PostMapping
public String edit(
@Validated(value = ItemUpdateRequest.class) @ModelAttribute Item item, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
log.info("binding result = {}", bindingResult);
return "form";
}
log.info("****** ๋น์ฆ๋์ค๋ก์ง ์ํ ********");
return "form";
}
}
์ด๋ ๊ฒ groups
๋ฅผ ์ด์ฉํ๋ฉด ํ ๊ฐ์ฒด๋ก ํผ๋ง๋ค ๋ค๋ฅธ ๊ฒ์ฆ๋ก์ง์ ์ ์ฉ์ํฌ ์ ์์ต๋๋ค.
์์ฒ๋ผ ์์ฃผ ๊ฐ๋จํ ์์ ์ ๊ฒฝ์ฐ groups
๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด์์ ๊ฒ์ฆ๋ก์ง์ ๊ตฌ๋ถํ ์ ์์ง๋ง ์ค์ ๋ก ์ ์ฉํ๊ธฐ๋ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
ํ์ฌ ์์ ์์๋ ๋๋ฉ์ธ ๊ฐ์ฒด(Entity)
๋ฅผ ํผ ๋ฐ์ดํฐ์ ๊ทธ๋๋ก ๋งคํ์์ผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ณต์กํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ๋ฒ์ด๋๋ ๋ง์ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๊ฐ ํ ๋ฒ์ ๋์ด์ฌ ๊ฒ ์
๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋๋ฉ์ธ ๊ฐ์ฒด
์ groups
๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ์ข์ ๋ฐฉ๋ฒ์ ์๋๋๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ํด๋น ํผ์ ๋ฑ ๋ง์ถฐ์ง ๊ฐ์ฒด๋ฅผ ์ ์ํ์ฌ ๋งคํ์ํค๋ ๊ฒ ์
๋๋ค.
๊ฒฐ๊ตญ ํผ ๊ฐ์ฒด๋ฅผ ๋๋ฉ์ธ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์ ์ด ํ์ํ๊ฒ ์ง๋ง ๋ณต์กํ ํผ ๋ฐ์ดํฐ๋ฅผ ๋ฑ ๋ง๊ฒ ๋ฐ์ ์ ์๋ค๋ ์ฅ์ ๊ณผ ๊ฒ์ฆ์ ์ฉ์ด์ฑ์ ์ฑ๊ธฐ๋ ๊ฒ ์
๋๋ค.
ํผ๋ง๋ค ๋ฑ ๋ง๋ ํผ ๊ฐ์ฒด๋ฅผ ์ ์ํ์ฌ ๋ณต์กํ ์ํฉ์๋ ๋์ฒ ๊ฐ๋ฅํ๋๋ก ํฉ์๋ค. !
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง MVC 2ํธ ์ ์๊ฐํ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.