springboot_validation : @InitBinder

This commit is contained in:
haerong22
2021-07-16 03:42:47 +09:00
parent 5b48261a38
commit 0a0651e90e
2 changed files with 32 additions and 2 deletions

View File

@@ -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();
// }
}

View File

@@ -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<Item> 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) {