Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Bean Validation - Object Error 본문

인프런/[인프런] 스프링 MVC 2

Bean Validation - Object Error

Seung__ 2021. 9. 25. 14:34

Field Error말고 Object Error는 어떻게 처리함???

 

1. @ScriptAssert()


@Data
@ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000")
public class Item {

 

  • Message 지정도 가능하다.
@Data
@ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000", 
				message = "10000원 넘게 입력해")
public class Item {

  • Message Code
    • ScriptAssert.item
    • ScriptAssert
  • 하지만 @ScriptAssert는 제약이 많고 복잡함.
  • 심지어  실무에서는 검증 기능이 해당 객체의 범위를 넘어서는 경우도 있음.
  • 그런 경우 대응이 어려움.
  • 따라서 Object Error(Global Error)의 경우  @ScriptAssert  보다는 
  • Object Error 관련 부분만 직접 자바 코드로 작성

 

 

2. Controller


  • 검증 로직 추가
  • @ScriptAssert 삭제
    @PostMapping("/add")
    public String addItem(@Validated @ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) {

        //특정 필드가 아닌 복합 룰 검증
        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);
            // model.addAttribute("errors", errors);
            return "validation/v3/addForm";
        }

        //성공 로직.
        Item savedItem = itemRepository.save(item);
        redirectAttributes.addAttribute("itemId", savedItem.getId());
        redirectAttributes.addAttribute("status", true);
        return "redirect:/validation/v3/items/{itemId}";
    }

 

 

 

3. GitHub : 210925 Bean Validation, Object Error


 

GitHub - bsh6463/Validation-V1

Contribute to bsh6463/Validation-V1 development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글

Bean Validation - Groups  (0) 2021.09.25
Bean Validation - 한계점.  (0) 2021.09.25
Bean Validation - Error Code  (0) 2021.09.25
Bean Validation - Spring 적용  (0) 2021.09.25
Bean Validation - 시작  (0) 2021.09.25
Comments