- Spring MVC 마스터하기 Validation 92022년 05월 26일
- starryeye
- 작성자
- 2022.05.26.:43
Validation 8에서 정말 간편한.. 스프링이 지원하는 글로벌 Validator(LocalValidatorFactorBean) 사용법을 알아봤다..
추가로 개발 시, 고려 되어야 할 사항에 대해 알아보자.
여러 페이지에 대한 컨트롤러를 개발하다보면.. 비슷한 필드가 존재하는 HTML Form이 사용될 수 있다.
그래서 개발자는 여러페이지에 대해 동일하게 Binding할 객체를 하나만 생성해서 쓰려고 고려를 할 수 있다.
(그래서 같은 객체를 사용)
이는.. 잘못된 접근이다..
각 페이지에 대해 개발을 지속적으로 진행하다보면..
예를들면..
사양이 처음보다 많이 바뀌어
A페이지에서는 X객체의 a필드 값 범위가 1~100이고
B페이지에서는 X객체의 a필드 값 범위가 없다고 치면..
하나의 객체의 하나의 필드에 어노테이션을 각 컨트롤러에 따라 각기 다르게 적용해야되는 경우가 생긴다.
이때.. 어떻게 해야할까..
<방법>
1. @Validated 의 groups 기능을 사용해야하거나.. (@Valid는 groups 기능 없음)
-> 구분용 interface를 만들어 Item 객체의 어노테이션(@NotNull과 같은)에 요소로 각각 등록
-> 결국 Item객체가 또 지저분 해지고 유지보수성이 떨어진다.(가독성 내려감)
-> 그리고 실제 현업 코드에서는 서로 다른 페이지에서 넘어오는 데이터가 겹칠 일이 거의 없음
2. Item 객체는 Repository에 넣기 직전의 객체로 놔두고.. 새로운 객체들(A페이지용, B페이지용)을 만들어
사용한다.
-> Repository에 넣을 때는 Item 객체로 변환하여 Item 객체로 넣는다.
-> Item 객체에는 결국 Validator가 보는 어노테이션이 모두 빠지고 새로 만든 바인딩용 객체에 각각 사양에 맞는 검증 어노테이션이 들어간다.
2번 방법의 구현을 보자
addItem Controller @Validated를 사용하여 검증을 수행한다.
-> 새로 만든 ItemSaveForm 타입으로 바인딩 및 검증을 수행한다.
뷰템플릿 코드를 건드리지 않기 위해.. @ModelAttribute에서 name요소을 "item" 으로 지정한다.
("item"으로 지정하지 않으면 뷰템플릿에 "itemSaveForm"으로 Model에 담기고.. th:object 이름 변경해야됨)
기존의 Item 객체를 만들어 Repository에 넣어준다.
ItemSaveForm Item 클래스에 있는 어노테이션을 다 지우고 새로 ItemSaveForm 클래스를 만들고..
addItem Controller에서 검증하는 사양대로 어노테이션을 붙여줌.
ItemUpdateForm edit Controller에 검증용으로 사용 할(다른페이지) 클래스이다.
ItemSaveForm 과 다른 어노테이션이 적용되어있다..
edit Controller edit 페이지에서 사용 될 controller이다.
addItem Controller와 다른 ItemUpdateForm 검증용 클래스 타입이 파라미터에 보인다.
addItem Controller와 동일하게 @ModelAttribute name 요소로 "item" 이 사용되고 있다.
Repository에 저장하기 위한 Item 객체가 사용되고 있다.
'Spring > MVC' 카테고리의 다른 글
Spring MVC 마스터하기 쿠키, 세션 1 (0) 2022.05.29 Spring MVC 마스터하기 Validation 10 (0) 2022.05.28 Spring MVC 마스터하기 Validation 8 (0) 2022.05.26 Spring MVC 마스터하기 Validation 7 (0) 2022.05.26 Spring MVC 마스터하기 Validation 6 (0) 2022.05.26 다음글이전글이전 글이 없습니다.댓글