diff --git a/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV1.java b/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV1.java index 2fcbefe3..82d6ac25 100644 --- a/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV1.java +++ b/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV1.java @@ -5,10 +5,13 @@ import hello.itemservice.domain.item.ItemRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Controller @RequestMapping("/validation/v1/items") @@ -38,7 +41,35 @@ public class ValidationItemControllerV1 { } @PostMapping("/add") - public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes) { + public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { + + // 검증 오류 결과를 보관 + Map errors = new HashMap<>(); + + // 검증 로직 + if (!StringUtils.hasText(item.getItemName())) { + errors.put("itemName", "상품 이름은 필수입니다."); + } + if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { + errors.put("price", "가격은 1,000 ~ 1,000,000 까지 허용합니다."); + } + if (item.getQuantity() == null || item.getQuantity() >= 9999) { + errors.put("quantity", "수량은 최대 9,999 까지 허용됩니다."); + } + if (item.getPrice() != null && item.getQuantity() != null ) { + int resultPrice = item.getPrice() * item.getQuantity(); + if (resultPrice < 10000) { + errors.put("globalError", "가격 * 수량의 합은 10,000원 이상 이어야 합니다. 현재 값 = " + resultPrice); + } + } + + // 검증 실패시 + if (!errors.isEmpty()) { + model.addAttribute("errors", errors); + return "validation/v1/addForm"; + } + + // 검증 성공시 Item savedItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId", savedItem.getId()); redirectAttributes.addAttribute("status", true); diff --git a/springboot_validation/src/main/resources/templates/validation/v1/addForm.html b/springboot_validation/src/main/resources/templates/validation/v1/addForm.html index aef9bff0..ef28aebc 100644 --- a/springboot_validation/src/main/resources/templates/validation/v1/addForm.html +++ b/springboot_validation/src/main/resources/templates/validation/v1/addForm.html @@ -8,6 +8,10 @@ .container { max-width: 560px; } + .field-error { + border-color: #dc3545; + color: #dc3545; + } @@ -19,17 +23,36 @@
+ +
+

전체 오류 메시지

+
- + +
+ 상품명 오류 +
- + +
+ 가격 오류 +
- + +
+ 수량 오류 +