관리 메뉴

웹개발 블로그

[Spring] BindingResult(검증처리) 본문

◆SPRING/검증

[Spring] BindingResult(검증처리)

쿠키린 2023. 1. 23. 19:46

스프링이 제공하는 메커니즘(체제) 중 하나 BindingResult

 

#사용법

1. 파라미터에 BindingResult 객체명 추가.

2. 에러가 날 시에 저장할 부분에 

( bindingResult.addError(new FieldError("vo객체명","필드명","에러메시지 작성"));)

3. 글로벌 에러인 경우

( bindingResult.addError(new ObjectError("vo객체명","에러메시지 작성"));)

4. 에러가 있다면?

( bindingResult.hasErrors() )

 

#살펴보기

오류가 없다면 Model 값을 가져오며

오류가 있다면 BindingResult 안에서 값을 가져온다.

 

FeildError 생성자

public FieldError(String objectName, String field, String defaultMessage) {..}

- 필드에 오류가 있다면 FieldError 객체를 생성해서 BindingResult객체에 담아두면 된다.

순서1 objectName : @ModelAttribute 이름

순서2 field : 오류가 발생한 필드 이름

순서3 defaultMessage : 오류 기본 메시지

 

ObjectError 생성자

public ObjectError(String objectName, String defaultMessage) {..}

- 특정 필드를 넘어서는 오류가 있으면 ObjectError객체를 생성해서 bindingResult에 담아두면 된다.

(특정 필드가 아닌 해당 객체 자체에 문제가 있을 시 사용하는 값)

순서1 objectName : @ModelAttribute 이름

순서2 defaultMessage : 오류 기본 메시지

 


적용 사례 🔽

public String addItemBinding(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model){

    //검증 로직
    //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 까지 허용합니다."));
    }

    //특정 필드가 아닌 복합 룰 검증(글로벌 에러)
    //ObjectError
    if(item.getPrice() != null && item.getQuantity() != null){
        int resultPrice = item.getPrice() * item.getQuantity();
        if(resultPrice < 10000){
            bindingResult.addError(new ObjectError("item","가격*수량의 합은 10,000원 이상이어야 합니다. 현재 값 = "+resultPrice));
        }
    }

    //검증에 실패하면 다시 입력 폼으로
    if(bindingResult.hasErrors()) {//bindingResult에 error가 있다면
        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}";
}

 

'◆SPRING > 검증' 카테고리의 다른 글

[검증] 클라이언트 검증, 서버 검증  (0) 2023.02.09