이제 스프링이 제공하는 검증 오류 처리 방법을 알아보자. 핵심은 바로 BindingResult이다. 바로 한번 코딩해보자.
@PostMapping("/add")
public String addItem(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) {
/add
핸들러에 BindingResult라는 객체를 추가해주자.
이 친구가 우리가 전에 만든 errors라는 Map객체 역할을 해준다.
//검증 로직
if(!StringUtils.hasText(item.getItemName())){
bindingResult.addError(new FieldError("item", "itemName", "상품 이름"));
}
bindingResult객체에 addResult메서드로 errors에 했던 것 처럼 인자를 담아준다. 이때 addResult()
에는 FieldError라는 객체를 담아주고, 객체의 생성자에는 인자를 세개 담는다.
이런식으로 다 만들어주자.
//검증 로직
if(!StringUtils.hasText(item.getItemName())){
bindingResult.addError(new FieldError("item", "itemName", "상품 이름은 빈칸이면 안됩니다."));
}
if(item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000){
bindingResult.addError(new FieldError("item", "price","가격은 1,000~1,000,000까지 허용합니다."));
}
if(item.getQuantity() == null || item.getQuantity() >= 9999){
bindingResult.addError(new FieldError("item", "quantity","수량은 최대 9,999까지 허용합니다."));
globalError는 특정 field가 없다. 이때는 ObjectError라는 객체에 담아준다.