Validation 우선순위 적용하기
559
작성한 질문수 2
안녕하세요! 현재 강의를 듣고 개인적으로 프로젝트를 진행하고 있습니다. 회원가입 폼을 만들고 각각의 값이 유효한지를 검증하도록 하고 있습니다.
그런데 만약 필드가 5개가 있고, 각각 @NotBlank와 @Pattern으로 검증한다고 했을 때, 검증에 우선순위를 두어서 @NotBlank가 실패한 경우에는 @Pattern은 검증하지 않도록 하는 방법이 있을까요? 지금은 공백을 입력하는 경우 @NotBlank에 대한 에러메시지와 @Pattern에 대한 에러메시지가 모두 출력되고 있습니다. 공백을 입력하는 경우 @Pattern에 대한 에러는 출력하지 않고 싶습니다.(@Pattern에 공백을 허용하도록 정규식을 작성하면 될 것 같지만, @Pattern 이외에 다른 Validation을 사용할 경우도 생각해서 정석적인 방법을 알고 싶습니다.)
먼저 적용해본 방식은, 순서를 지정하는 인터페이스를 만들고 @GroupSequence를 적용하는 것인데요, @NotBlank를 상위 우선순위로 두고 @Pattern을 하위 우선순위로 두었을 떄, 어떤 한 필드에서라도 @NotBlank를 만족시기키 못해 에러메시지가 나가면, 다른 필드에서 @Pattern의 메시지가 나가야 하는 상황에서도 출력되지 않는 문제가 있어 원하는 방식이 아니었습니다.
만약 Validation과정에서 우선순위를 정할 수 없는 방법이 없다면 제가 bindingResult를 조작하여 원하는 error만 view로 넘겨주거나, 타임리프에서 우선순위에 맞는 에러만 보여줄 수 있는 방법이 있을까요? bindingResult의 값을 다 까서 필요한 것들만 다른 List나 Map에 담아 Model로 넘기는 것은 너무 돌아가는 방법인 것 같아 정석적인 방법이 있는지 질문드립니다.
답변 1
2
안녕하세요. BrokenCareer님
지금 떠오르는 방법은 2가지 입니다.
첫 번째는 검증은 모두 하더라도 메시지가 중복 출력되는 것이 문제이면 다음과 같이 처리하면 될 것 같아요.
기존 코드
<div class="field-error" th:errors="*{price}">
가격 오류
</div>
변경 코드
<div class="field-error" th:each="error, stat : ${#fields.errors('price')}" th:text="${error}" th:if="${stat.first}" />
변경 코드를 보시면 오류 메시지가 반복에서 처음인 경우에만 div를 출력하도록 했습니다.
두 번째는 만약 이 방법으로 원하는 목표가 달성되지 않는다면, 제 생각에는 이 경우 BeanValidation을 사용하지 않고, 앞서 배운 것 처럼 BindingResult.reject()... 등과 코드로 직접 컨트롤하는 것이 좋을 듯 합니다.
관련해서 더 좋은 방법을 아시는 분은 도움 부탁드립니다.
감사합니다.
이미지 업로드와 db 트랜잭션 묶는법
0
41
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
50
2
MessageSourceTest 코드
0
46
1
인터셉터 에러 설정
0
48
1
resolveArgument()메서드 질문
0
55
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
53
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
132
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
87
3
pdf 오타 문의
0
56
1
ItemUpdateForm 검증 관련 질문입니다.
0
47
1
22page 링크 주소 변경
0
58
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
52
1
섹션3번 수업에 대한 질문입니다.
0
79
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
84
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
64
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
141
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
63
1
톰캣 에러 페이지가 안보입니다.
0
100
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
80
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
118
2
ApiExceptionController 질문드립니다.
0
62
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
64
1
MemberRepository 필드의 fianl 선언 유무
0
84
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
57
1





