7/12 스프링 MVC : 메시지

박세현·2024년 7월 12일

Spring

목록 보기
9/15
post-thumbnail

스프링 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) 다국어 메시지 파일

  • properties 파일


예시) 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

profile
귤귤

0개의 댓글