스프링 MVC
1. 메시지
1) MessageSource
- Bean으로 등록
- 반드시 빈의 이름이 messageSource로 지정
- 메서드
- getMessage(메세지 코드, ...배열, 요청헤더 로케일) : 메세지코드에 해당하는 메세지문구 가져오기
- ex) properties파일에
EMAIL=이메일 정의
➡️ messageSource.getMessage("EMAIL", null, Local.KOREAN)
➡️ 출력 : 이메일
- setUserCodeDefualtMessage(true) : 메세지 코드가 없는경우 메세지코드로 메세지 대체
Interface MessageSource
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/MessageSource.html

예시) MassegeConfig

ㄴ 보통 resources파일에 많이 생성



ㄴ 한개등록이냐, 여러개 등록이냐


ㄴ 메세지 설정 완
예시) MassageSourceTest_getMessage(메세지 코드, ...배열 , 요청헤더 로케일) - 로케일 : 한국어





예시) setUserCodeDefualtMessage(true) : 메세지 코드가 없는경우 코드로 메세지 대체





예시) 뷰 : 메세지 코드 속성에 적용


2) ResourceBundleMessageSource
- MessageSource 인터페이스를 구현하는 클래스
- 프로퍼티 파일로부터 메시지를 로드
3) 다국어 메시지 파일
예시) MassageSourceTest_getMessage(메세지 코드, ...배열, 요청헤더 로케일) - 로케일 : 영어



예시) 요청헤더 Accept-Langauage

ㄴ 이정보를 참고해서 로케일(언어파일?)을 바꾼다

ㄴ 이거에 따라서 헤더가 만들어진다
2. 커맨드 객체 검증
1) Validator 인터페이스
① supports(...)
② validate(...)
- 커맨드 객체 검증
- 매개변수
- Object target : 커맨드 객체
- Errors errors

2) Errors
① reject() : 특정필드❌
- 커맨드 객체 자체 오류에 대한 처리 = 특정필드❌
- reject("에러코드");
- reject("에러코드", "기본 메세지")
② rejectValue() : 특정필드⭕
- 커맨드 객체의 특정 필드 오류에 대한 처리 = 특정필드⭕
- rejectValue("필드명", "에러코드");
- rejectValue("필드명", "에러코드", "기본메세지");
③ hasErrors()
- 한개라도 reject 또는 rejectValue가 호출되면 true
참고) 타임리프
#fields.errors("필드명") : -> errors 객체 담긴 메세지를 필드명으로 조회 -> 배열
3) ValidationUtils
- 필수 항목 검증에 편의 메서드
- rejectIfEmpty(...)
- rejectIfEmptyOrWhitespace(...) : 공백 포함 체크
3. 에러 코드에 해당하는 메시지 코드를 찾는 규칙
- 에러코드 + "." + 커맨드객체이름 + "." + 필드명
- 에러코드 + "." + 필드명
- 에러코드 + "." + 필드타입
- 에러코드
4. 프로퍼티 타입이 List나 목록인 경우 다음 순서를 사용해서 메시지 코드를 생성
- 에러코드 + "." + 커맨드객체이름 + "." + 필드명[인덱스].중첩필드명
- 에러코드 + "." + 커맨드객체이름 + "." + 필드명.중첩필드명
- 에러코드 + "." + 필드명[인덱스].중첩필드명
- 에러코드 + "." + 필드명.중첩필드명
- 에러코드 + "." + 중첩필드명
- 에러코드 + "." + 필드타입
- 에러코드
5. 글로벌 범위 Validator와 컨트롤러 범위 Validator
1) 글로벌 범위 Validator 설정과 @Valid 애노테이션
- WebMvcConfigurer의 getValidator()
2) @InitBinder 애노테이션을 이용한 컨트롤러 범위 Validator
@InitBinder
protected void InitBinder(WebDataBinder binder) {
binder.setValidator(new RegisterRequestValidator());
}
3) 컨트롤러 범위 Validator > 글로벌 범위 Validator
6. Bean Validation
- 기본검증해주는 의존성
ex) 이메일 중복여부, 비밀번호 자리수 체크 등등
- Bean Validation API
- implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
- hibernate Validator (Bean Validation API의 구현체)
-> 알려주면 알아서 검증해준다(기본적인 검증 거의 다 해준다, 여기서 안해주는 검증만 밸리데이터 정의해주면 됨)
- implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final'
-> 3.0.2버전으로 Bean Validation API 써야 함
- 이거 추가하면 Bean Validation API 굳이 따로 추가안해도 되긴 함
- 의존성에 의존성으로 자동 추가됨
1) 설정
2) Bean Validation의 주요 애노테이션
-
@AssertTrue
-
@AssertFalse
-
@DecimalMax
-
@DecimalMin
-
@Max
-
@Min
-
@Digits
-
@Size
-
@Null
-
@NonNull
-
@Pattern
-
@NotEmpty
-
@NotBlank
-
@Positive
-
@PositiveOrZero
-
@Email
-
@Future
-
@FutureOrPresent
-
@Past
-
@PastOrPresent