스프링/4. 스프링 MVC-2

39. 빈 검증 오브젝트 에러

sdafdq 2023. 9. 3. 15:35
@ScriptAssert(lang="javascript", script = "_this.price * _this.quantity >= 10000", message = "총 합이 10000원 이상이어야 합니다.")
public class Item {

    private Long id;
    @NotBlank(message="공백X")
    private String itemName;

    @NotNull
    @Range(min=1000,max=100000)
    private Integer price;

    @NotNull
    @Max(9999)
    private Integer quantity;

    public Item() {
    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }
}

@ScriptAssert(lang="javascript", script = "_this.price * _this.quantity >= 10000", message = "총 합이 10000원 이상이어야 합니다.")

 

이 부분 이기는 한데..

@ScriptAssert(lang="대상언어", script="로직", message="메시지")

 

아마 이 부분이 템플릿의 자바스크립트에서 동작하게 만드는 것 같다..?

근데 좀 다를 듯. 서버사이드 상에서 자바스크립트로 하는 듯.

 

필드를 지정할 때는 _this. 이렇게 접근해야 한다.

script는 그냥 스크립트 언어이고, 단 논리연산자, 값이 true나 false로 반환되어야 하는 거다.

 

근데 사실 오브젝트 에러는 이 오브젝트 뿐만 아니라 다른 오브젝트까지 관련해서 비교해야 할 수도 있다..

 

이럴 때는 그냥..

@PostMapping("/add")
public String addItem(@Validated @ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) {
    //검증 오류 보관

    validMultiplePrice(item, bindingResult);

    if(bindingResult.hasErrors()){
        log.info("errors = {}", bindingResult);
        return "/validation/v3/addForm";
    }

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

private void validMultipleQuantityPrice(Item item, BindingResult bindingResult){
    if(item.getPrice() != null && item.getQuantity() != null){
        int resultPrice = item.getPrice() * item.getQuantity();
        if( resultPrice < 10000){
            bindingResult.reject("MinQuantityPrice", new Object[]{10000, resultPrice, null);
        }
    }
}

이렇게 직접 그냥 컨트롤러에 넣어주기도 한다..

 

 

 

'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글

41. Form 전송객체 분리  (0) 2023.09.04
40. 컨트롤러 간 검증이 다른 경우.  (0) 2023.09.03
38. 빈 검증기 오류메시지 바꾸기  (0) 2023.09.03
37. 빈 검증  (0) 2023.09.02
36. 검증로직 분리 2  (0) 2023.09.02