728x90
- 두 가지 방법을 통해 수정 요구사항과 등록 요구사항에 각각 다른 검증을 실행할 수 있다.
- BeanValidation의 groups 기능을 사용한다.
- Item을 직접 사용하지 않고, ItemSaveForm, ItemUpdateForm 같은 폼 전송을 위한 별도의 모델 객체를 만들어서 사용한다.
- BeanValidation을 Groups를 사용해보자
check용 인터페이스
public interface UpdateCheck {
}
public interface SaveCheck {
}
Check용 인터페이스 마다 다르게 동작하도록 Validation 정의
@Data
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;
}
}
각각의 검증이 다른 Group에서 동작하도록 설정
@PostMapping("/add")
public String addItem2(@Validated(SaveCheck.class) @ModelAttribute Item item, BindingResult bindingResult,
RedirectAttributes redirectAttributes, Model model) {
//SaveCheck 에 관련된거만 적용된다
//groups 기능을 사용하기 위해서는 @Validated 를 사용해야한다
}
@PostMapping("/{itemId}/edit")
public String editV2(@PathVariable Long itemId, @Validated(UpdateCheck.class) @ModelAttribute Item item, BindingResult bindingResult) {
//특정 필드가 아닌 복합 룰 검증
}
- @Valid 에는 groups를 적용할 수 있는 기능이 없다. 따라서 groups를 사용하려면 @Validated를 사용해야 한다
- groups 기능을 사용해서 등록과 수정시에 각각 다르게 검증을 할 수 있었다. 그런데 groups 기능을 사용하니 Item 은 물론이고, 전반적으로 복잡도가 올라갔다.
- 사실 groups 기능은 실제 잘 사용되지는 않는데, 그 이유는 실무에서는 주로 다음에 등장하는 등록용 폼 객체와 수정용 폼 객체를 분리해서 사용하기 때문이다
728x90
'스프링 MVC 2편(백엔드 웹 개발 활용 기술)' 카테고리의 다른 글
| Ch05. 검증(Bean Validation) - Bean Validation(HTTP 메시지 컨버터) (0) | 2022.03.16 |
|---|---|
| Ch05. 검증(Bean Validation) - Form 전송 객체 분리 (0) | 2022.03.16 |
| Ch05. 검증(Bean Validation) - Bean Validation(수정 & 한계) (0) | 2022.03.16 |
| Ch05. 검증(Bean Validation) - Bean Validation(오브젝트 오류) (0) | 2022.03.16 |
| Ch05. 검증(Bean Validation) - Bean Validation(에러 코드) (0) | 2022.03.16 |