관리 메뉴

샐님은 개발중

[String boot] Bean Validation -한계 본문

스프링 MVC 2편 - 인프런 김영한/섹션 4 ,5- 검증1,2 - Validation

[String boot] Bean Validation -한계

샐님 2023. 7. 13. 19:38
728x90
반응형

데이터를 등록 할때와 수정할때 요구사항이 다를 수 있다. 

 

등록시 -> 수정시

quantity 요구 사항

 최대 : 9999 ->  수량을 무제한 변경가능

id 요구사항

필수아님 -> 수정시에는 id 값이 필수

 

 


 

 

1. BeanValidation groups 기능 사용

1. groups 생성

SaveCheck ,UpdateCheck 인터페이스 생성

2. item.java 에 검증 애노테이션에  group 속성 추가

package hello.itemservice.domain.item;

import lombok.Data;
import org.hibernate.validator.constraints.Range;
import org.hibernate.validator.constraints.ScriptAssert;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

@Data
//@ScriptAssert(lang ="javascript",script="_this.price * _this.quantity>= 10000", message="총합이 10000원 넘게 입력해주세요.")
public class Item {
    
    @NotNull(groups = UpdateCheck.class) //수정시에만 적용
    private Long id;
    @NotBlank(groups = {SaveCheck.class, UpdateCheck.class})
    private String itemName;
    @NotNull(groups = {SaveCheck.class, UpdateCheck.class})
    @Range(min = 1000, max = 1000000, groups = {SaveCheck.class,
            UpdateCheck.class})
    private Integer price;
    @NotNull(groups = {SaveCheck.class, UpdateCheck.class})
    @Max(value = 9999, groups = SaveCheck.class) //등록시에만 적용
    private Integer quantity;

    public Item() {
    }

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

3. Contorller.java 에 group추가

   public String addItem(@Validated(SaveCheck.class) @ModelAttribute Item item , BindingResult bindingResult, RedirectAttributes redirectAttributes)

 

 

실제로 실무에서는 groups 잘사용하지 않음 -> 복잡도가 올라가고 등록용 폼 객체와 수정용 폼 객체를 분리해서 사용하기 떄문.

 

 

728x90
반응형