본 프로젝트 자료는 김영한님의 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고 제작됐음을 알립니다.
LocalValidatorFactoryBean 을 글로벌 Validator로 등록한다.
직접 등록으로 사용했던 Validation 을 지우고 지금부터 배워볼 Bean Validator 기본 코드를 넣고 테스트 해볼려고 한다.
Bean Validator 라이브러리 기능인 @NotBlank
검증기를 추가했던 부분 전부 지우고 @Validated 만 남기도록 한다.
결과 화면
복잡한 코드 없이 오류 메시지를 출력해주는 모습을 확인 할 수 있다.
Bean Validation이 기본으로 제공하는 오류 메시지 입맛대로 변경하고 싶다면?
errors.properties
errors.properties 에러 메시지 모음집에 코드만 추가해주면 된다.
결과 화면
현재 추가한 메시지 코드들은 최하위 순서이기에 조금더 상위 코드로 오류 메시지 수정 테스트 해보겠다.
결과 화면
이런 결과가 나올 수 있는 이유는 BeanValidation 라이브러리 가 있기에 가능하다.
@ScriptAssert() 를 사용를 사용해서 하는 방법도 알아보자.
예제 코드
코드 추가 후
실행 결과
정상적으로 출력이 된다. 만약 메시지가 마음에 들지 않는다면 수정도 해볼려고 한다.
예제 코드
실행 결과
정말 간단하게 완성시키는 모습을 볼 수 있다.
하지만 검증 기능이 해당 객체의 범위를 넘어서는 경우들이 종종 있고 그런 경우 대응하기 힘들다는 얘기가 있다고 한다.
사용하지 말도록 하자...
기존거 사용하는걸로...
예제 코드 추가
HTML 추가
빨간색 경고 표시 색 구분용 으로 추가
글로벌 오류 메시지 추가
상품명, 가격, 수량 3종 세트 오류 메시지 띄울 수 있게 추가
결과 화면
정상적으로 작동한다.
요구사항 변경이 생겨 수정해야할 상황이 발생했다고 하고 계획을 잡고 수정해볼려고 한다.
예제 코드
이대로만 수정해도 문제가 없다고 판단하고 그대로 실행해봤다.
정상적으로 등록된 모습을 확인할 수 있다. 하지만,
수정 화면은 id가 있어 NotNull의 적용을 받아도 문제가 발생하지 않지만 등록할 때 id 가 없어 값이 들어가지 않아 NotNull 문제로 다음 화면으로 넘어가지 못하고 있다.
이 문제는 Bean Validation - groups 으로 해결 방법을 찾아보고자 한다.
groups 라는걸 이용해서 별도의 객체를 저장 과 수정을 따로 만들어서 하면 위에 문제들을 해결할 수 있다.
저장 객체
수정 객체
일단 저장과 수정 객체를 각각 만들어 주고 여기에 데이터를 담을 수 있게 코드를 수정해보자.
저장 객체 groups = SaveCheck.class
저장 객체에 들어간 정보
수정 객체에 들어간 정보
저장만 id를 제외한 나머지 값을 전부 받았다.
저장값이 들어갈 수 있게 @Validated(SaveCheck.class) 를 넣어둔다.
edit 부분에도 수정값이 들어갈 수 있게 @Validated(UpdateCheck.class) 를 넣어둔다.
이러면 실행 결과를 확인해보자
저장 실행 결과
저장에는 id가 들어가지 않아 실행에 문제 생기지 않았으며, max를 넣어 9999까지 밖에 입력을 못한다.
수정 실행 결과
수정에는 max 제한을 받지 못해 9999 이상의 값도 넣을 수 있게 됐다.
이것만 보면 정말 사용하기 편하기 유용해 보이지만, groups 기능을 실무에서 잘 사용하지 않는다고 한다. 버려야겠다.