ABAP DUMP ERROR 24시

BindingResult , add FieldError=-> rejectValue 변환 본문

[WEB]Back-end/Spring MVC

BindingResult , add FieldError=-> rejectValue 변환

이운형 2022. 2. 21. 16:06
반응형

# 인프런 김영한의 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 개인적으로 정리한 글입니다.

 

정리


bindingResult.addError(new FieldError("item", "price", item.getPrice(), false, new String[]{"range.item.price"}, new Object[]{1000, 1000000}, null));

addError(new FieldError()) 

대신에 rejectValue를 사용하자

bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null);

장점

자세히 보면 item 이라는 객체의 생략

item.getPrice라는 에러 보관함 생략

new String[]{"range.item.price"} 라는 구체적인 명시 대신 "range"로 간편하게 축약

 

 

살펴보기


과거 new FieldError("")를 통해 에러 메세지를 주입하였다.

더 줄일수는 없을까?

 

log.info("objectName = {}", bindingResult.getObjectName());
log.info("target = {}", bindingResult.getTarget());

bindingResult에 대한 로그를 찍어보니

 

이미 bindingResult는 Item이라는 파라미터 뒤에 위치하므로

Item 객체를 가지고있다!

 

 

 

 

/    @PostMapping("/add")
//    public String addItemV3(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes){
//        if(!StringUtils.hasText(item.getItemName())){
//            bindingResult.addError(new FieldError("item", "itemName", item.getItemName(), false, new String[]{"required.item.itemName"}, null,null));
//        }
//        if(item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000){
//            bindingResult.addError(new FieldError("item", "price", item.getPrice(), false, new String[]{"range.item.price"}, new Object[]{1000, 1000000}, null));
//        }
//        if(item.getQuantity() == null || item.getQuantity() > 10000){
//            bindingResult.addError(new FieldError("item" , "quantity", item.getQuantity(),false,new String[]{"max.item.quantity"}, new Object[]{9999}, null));
//        }
//
//        if (item.getPrice() != null && item.getQuantity() != null){
//            int resultPrice = item.getPrice() * item.getQuantity();
//            if (resultPrice < 10000){
//                bindingResult.addError(new ObjectError("item", new String[]{"totalPriceMin"}, new Object[]{10000, resultPrice}, null));
//            }
//        }
//
//        if (bindingResult.hasErrors()){
//            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}";
//    }

이랬던 코드가

 

@PostMapping("/add")
public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes){
    log.info("objectName = {}", bindingResult.getObjectName());
    log.info("target = {}", bindingResult.getTarget());

    if(!StringUtils.hasText(item.getItemName())){
        bindingResult.rejectValue("itemName", "required");
    }
    if(item.getPrice() == null || item.getPrice()< 1000 || item.getPrice() > 1000000){
        bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null);
    }
    if(item.getQuantity() == null || item.getQuantity() >10000){
        bindingResult.rejectValue("quantity", "max", new Object[]{9999}, null);
    }

    if(item.getPrice() != null && item.getQuantity() != null){
        int resultPrice = item.getPrice() * item.getQuantity();
        if(resultPrice < 10000){
            bindingResult.reject("totalPriceMin" , new Object[]{10000, resultPrice}, null);
        }
    }

    if(bindingResult.hasErrors()){
        log.info("errors={}", bindingResult);
        return "validation/v2/addForm";
    }
    Item savedItem = itemRepository.save(item);
    redirectAttributes.addAttribute("item", savedItem.getId());
    redirectAttributes.addAttribute("status", true);
    return "redirect:/validation/v2/items/{itemId}";
}

 

반응형
Comments