inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

Validation 우선순위 적용하기

559

BrokenCareer

작성한 질문수 2

0

안녕하세요! 현재 강의를 듣고 개인적으로 프로젝트를 진행하고 있습니다. 회원가입 폼을 만들고 각각의 값이 유효한지를 검증하도록 하고 있습니다.

그런데  만약 필드가 5개가 있고, 각각 @NotBlank와 @Pattern으로 검증한다고 했을 때, 검증에 우선순위를 두어서 @NotBlank가 실패한 경우에는 @Pattern은 검증하지 않도록 하는 방법이 있을까요? 지금은 공백을 입력하는 경우 @NotBlank에 대한 에러메시지와 @Pattern에 대한 에러메시지가 모두 출력되고 있습니다. 공백을 입력하는 경우 @Pattern에 대한 에러는 출력하지 않고 싶습니다.(@Pattern에 공백을 허용하도록 정규식을 작성하면 될 것 같지만, @Pattern 이외에 다른 Validation을 사용할 경우도 생각해서 정석적인 방법을 알고 싶습니다.)

먼저 적용해본 방식은, 순서를 지정하는 인터페이스를 만들고 @GroupSequence를 적용하는 것인데요, @NotBlank를 상위 우선순위로 두고 @Pattern을 하위 우선순위로 두었을 떄, 어떤 한 필드에서라도 @NotBlank를 만족시기키 못해 에러메시지가 나가면, 다른 필드에서 @Pattern의 메시지가 나가야 하는 상황에서도 출력되지 않는 문제가 있어 원하는 방식이 아니었습니다.

만약 Validation과정에서 우선순위를 정할 수 없는 방법이 없다면 제가 bindingResult를 조작하여 원하는 error만 view로 넘겨주거나, 타임리프에서 우선순위에 맞는 에러만 보여줄 수 있는 방법이 있을까요? bindingResult의 값을 다 까서 필요한 것들만 다른 List나 Map에 담아 Model로 넘기는 것은 너무 돌아가는 방법인 것 같아 정석적인 방법이 있는지 질문드립니다.

MVC spring

답변 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