Skip to content

Commit

Permalink
Validator 분리1
Browse files Browse the repository at this point in the history
  • Loading branch information
kiteB committed Sep 27, 2021
1 parent a9ff523 commit 327e11f
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 1 deletion.
@@ -0,0 +1,35 @@
package hello.itemservice.web.validation;

import hello.itemservice.domain.item.Item;
import org.springframework.stereotype.Component;
import org.springframework.validation.*;

@Component
public class ItemValidator implements Validator {

@Override
public boolean supports(Class<?> clazz) {
return Item.class.isAssignableFrom(clazz);
}

@Override
public void validate(Object target, Errors errors) {
Item item = (Item) target;

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "itemName", "required");

if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) {
errors.rejectValue("price", "range", new Object[]{1000, 1000000}, null);
}
if (item.getQuantity() == null || item.getQuantity() > 10000) {
errors.rejectValue("quantity", "max", new Object[]{9999}, null);
}
//특정 필드 예외가 아닌 전체 예외
if (item.getPrice() != null && item.getQuantity() != null) {
int resultPrice = item.getPrice() * item.getQuantity();
if (resultPrice < 10000) {
errors.reject("totalPriceMin", new Object[]{10000, resultPrice}, null);
}
}
}
}
Expand Up @@ -24,6 +24,7 @@
public class ValidationItemControllerV2 {

private final ItemRepository itemRepository;
private final ItemValidator itemValidator;

@GetMapping
public String items(Model model) {
Expand Down Expand Up @@ -151,7 +152,7 @@ public String addItemV3(@ModelAttribute Item item, BindingResult bindingResult,
return "redirect:/validation/v2/items/{itemId}";
}

@PostMapping("/add")
// @PostMapping("/add")
public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
log.info("objectName={}", bindingResult.getObjectName());
log.info("target={}", bindingResult.getTarget());
Expand Down Expand Up @@ -183,7 +184,21 @@ public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult,
return "redirect:/validation/v2/items/{itemId}";
}

@PostMapping("/add")
public String addItemV5(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes) {

itemValidator.validate(item, bindingResult);

if (bindingResult.hasErrors()) {
log.info("errors={}", bindingResult);
return "validation/v2/addForm";
}
//성공 로직
Item savedItem = itemRepository.save(item);
redirectAttributes.addAttribute("itemId", savedItem.getId());
redirectAttributes.addAttribute("status", true);
return "redirect:/validation/v2/items/{itemId}";
}

@GetMapping("/{itemId}/edit")
public String editForm(@PathVariable Long itemId, Model model) {
Expand Down

0 comments on commit 327e11f

Please sign in to comment.