프로젝트 준비 v2

학습 페이지

BindingResult1

학습 페이지

이제 스프링이 제공하는 검증 오류 처리 방법을 알아보자. 핵심은 바로 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라는 객체를 담아주고, 객체의 생성자에는 인자를 세개 담는다.

  1. model 이름
  2. 검증의 타겟이 되는 필드 명
  3. 에러 메시지

이런식으로 다 만들어주자.

    //검증 로직
        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라는 객체에 담아준다.