From 0a0651e90ea23293c61b02fbfd84e7b201195e6e Mon Sep 17 00:00:00 2001 From: haerong22 Date: Fri, 16 Jul 2021 03:42:47 +0900 Subject: [PATCH] springboot_validation : @InitBinder --- .../itemservice/ItemServiceApplication.java | 10 +++++++- .../ValidationItemControllerV2.java | 24 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/springboot_validation/src/main/java/hello/itemservice/ItemServiceApplication.java b/springboot_validation/src/main/java/hello/itemservice/ItemServiceApplication.java index 1311934b..285fd6b0 100644 --- a/springboot_validation/src/main/java/hello/itemservice/ItemServiceApplication.java +++ b/springboot_validation/src/main/java/hello/itemservice/ItemServiceApplication.java @@ -1,13 +1,21 @@ package hello.itemservice; +import hello.itemservice.web.validation.ItemValidator; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.validation.Validator; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @SpringBootApplication -public class ItemServiceApplication { +public class ItemServiceApplication { // implements WebMvcConfigurer public static void main(String[] args) { SpringApplication.run(ItemServiceApplication.class, args); } + // global 설정 +// @Override +// public Validator getValidator() { +// return new ItemValidator(); +// } } diff --git a/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV2.java b/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV2.java index fc729c41..db862d25 100644 --- a/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV2.java +++ b/springboot_validation/src/main/java/hello/itemservice/web/validation/ValidationItemControllerV2.java @@ -10,6 +10,8 @@ import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; import org.springframework.validation.ValidationUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @@ -25,6 +27,11 @@ public class ValidationItemControllerV2 { private final ItemRepository itemRepository; private final ItemValidator itemValidator; + @InitBinder + public void init(WebDataBinder dataBinder) { + dataBinder.addValidators(itemValidator); + } + @GetMapping public String items(Model model) { List items = itemRepository.findAll(); @@ -179,7 +186,7 @@ public class ValidationItemControllerV2 { return "redirect:/validation/v2/items/{itemId}"; } - @PostMapping("/add") +// @PostMapping("/add") public String addItemV5(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { itemValidator.validate(item, bindingResult); @@ -196,6 +203,21 @@ public class ValidationItemControllerV2 { return "redirect:/validation/v2/items/{itemId}"; } + @PostMapping("/add") + public String addItemV6(@Validated @ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { + + // 검증 실패시 + if (bindingResult.hasErrors()) { + 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) {