작성
·
6
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
if(!StringUtils.hasText(item.getItemName())){ // 글자가 없으면
bindingResult.rejectValue("itemName", "required"); }
if(item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000){ bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null); }
if(item.getQuantity() == null || item.getQuantity() >= 9999){ bindingResult.rejectValue("quantity", "max", new Object[]{9999}, null); };
// errors.properties
required.item.itemName=상품 이름은 필수입니다.
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
max.item.quantity=수량은 최대 {0} 까지 허용합니다.
totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
rejectValue()로 price와 quantity를 넘겨서
유효성 검사에서 실패해서 error를 넘겨주는데 왜 전역 에러로는 뜨는데
필드 에러로는 안뜨는거죠?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김마루님.
스프링 MVC의 rejectValue()
메소드는 특정 필드에 대한 오류 메시지를 설정할 때 사용됩니다. 이 메소드는 주로 필드 단위의 검증 오류를 처리하는데, 두 개의 주요 이유로 인해 전역 오류로 처리되었을 수 있습니다.
오류 구분: rejectValue()
는 특정 필드에 대한 오류 구분을 명확하게 지정해야 합니다. 하지만 코드 내에서 totalPriceMin
과 같은 전역적인 로직에 대한 오류 메시지는 ObjectError
로 설정되었을 가능성이 있습니다. 따라서 이는 필드 에러가 아닌 객체 전체에 대한 전역 에러로 취급됩니다.
오류 메시지 설정: errors.properties
파일에서 필드와 관련된 오류 메시지를 명확히 구분했는지 확인이 필요합니다. 각 오류 코드와 필드 이름이 정확하게 매핑되어 있는지 확인해보세요.
rejectValue()
나 reject()
메소드 사용 시, BindingResult
는 오류 코드를 기반으로 메시지를 찾습니다. 만약 errors.properties
에 설정된 필드 에러 메시지가 불완전하거나 누락된 경우, 의도한 필드 에러로의 매핑이 제대로 되지 않을 수 있습니다.
다음 링크를 통해 관련 내용을 깊이있게 이해하고 다른 사용자들의 경험을 참고할 수 있습니다. 유사한 질문을 다루는 게시물도 체크해보세요:
- price에 qq를 넣었을 때 오류 발생과정
게시물에서 필드와 관련된 오류 처리 방식 및 MessageCodesResolver
의 동작 방식을 보다 명확히 이해하는 데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.