반응형
Bean Validation 한계와 해결하기 위한 groups
만약 변경 사항이 들어와서
@Max(value = 9999) //수정 요구사항 추가
private Integer quantity;
수정 할 때에는 한계값이 없어야 한다.
간단하게 여기서 어노테이션을 수정할 수 있겠지 싶지만 사실 그렇게 되면 등록을 할 때에도 한계값이 사라지기 때문에 요구사항에 맞지 않게 된다.
어노테이션을 분리해서 적용해야 하는데 그렇게 하기 위한 기능이 groups 기능이라고 보면 된다.
먼저 인터페이스 두 개를 만들어주었다.
public interface SaveCheck {
}
public interface UpdateCheck {
}
인터페이스 자체에 코드가 들어가진 않는다.
@Max(value = 9999, groups = {SaveCheck.class}) //수정 요구사항 추가
이걸 이제 이런식으로 groups스 기능을 통해 나누어 적용할 수 있게 된다.
물론 사용하기 위해서는 컨트롤러에서 등록을 해줘야 한다.
public String editV2(@PathVariable Long itemId, @Validated(UpdateCheck.class) @ModelAttribute Item
item, BindingResult bindingResult) {
수정시에만 사용하려면 UpdateCheck.class를 사용하도록 등록했다.
이렇게 되면 최대 값을 정한 SaveCheck.class는 등록시에만 적용이 되도록 하였고, 수정시에만 적용이 되도록 한 UpdateCheck.class는 사용하지 않았으므로 등록 할 때에는 값의 제한이 있고, 수정 할 때에는 값의 제한이 없게 된다.
참고로 @Valid 에는 groups를 적용할 수 있는 기능이 없으므로 @Validated를 사용해야 한다.
하지만 이렇게 groups 기능을 사용하면 등록과 수정시에 각각 다른 검증을 할 수 있는 장점이 있지만 복잡도가 올라가기 때문에 잘 사용하지 않는다. 현업에서는 등록용 폼 객체와 수정용 폼 객체를 분리해서 사용하는 편이다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
반응형
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : Bean Validation HTTP message Converter (0) | 2022.02.17 |
---|---|
[Spring Boot] : Form 전송 객체 분리하여 개발하기 (0) | 2022.02.17 |
[Spring Boot] : Bean Validation 수정에 적용하기 (0) | 2022.02.16 |
[Spring Boot] : Bean Validation Obejct 오류 (0) | 2022.02.16 |
[Spring Boot] : Bean Validation 에러 코드 (0) | 2022.02.16 |
댓글