Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Docker
  • til
  • grafana
  • Wil
  • 코틀린
  • 안드로이드
  • 우아한테크코스
  • 코딩테스트
  • rsocket
  • kotlin
  • 프로그래머스
  • 다이나믹 프로그래밍
  • 레포지토리
  • 에라토스테네스의 체
  • 문자열
  • webflux
  • java
  • 코틀린 인 액션
  • MariaDB
  • elasticsearch
  • Android
  • 백준
  • 프리코스
  • enum
  • 내림차순
  • spring
  • kibana
  • ec2
  • SQL
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Spring

[Spring] @Valid 메시지 message properties 사용하기, 한글 깨짐 해결

2023. 4. 27. 12:40

데이터 유효성 검증을 위해 다음과 같이 메시지를 하드 코딩했다.

 

SignupRequestDto

@Getter
@Setter
public class SignupRequestDto {

    @Size(min = 4, max = 10)
    @NotBlank
    @Pattern(regexp = "^[a-z0-9]*$")
    private String userId;

    @Size(min = 8, max = 15)
    @NotBlank
    @Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,15}", message = "비밀번호는 8~15자 영문 대 소문자, 숫자, 특수문자를 사용하세요.")
    private String password;
}

 

하드 코딩하지 않고 valid의 메시지를 관리하기 위해 message properties를 사용해보자.

 

message.properties 파일 생성

필자는 validation에 대한 메시지라는 것을 명확히 하기 위해 validation.properties 라는 이름으로 생성했다.

userId.pattern=영문, 숫자만 가능합니다.
password.pattern=비밀번호는 8~15자 영문 대 소문자, 숫자, 특수문자를 사용하세요.

콤마(.)를 구분값으로 사용했다.

 

메세지 프로퍼티에는 다음과 같이 메시지들을 작성할 수 있다.

test=This is test message
test.message=콤마를 넣어 구분값으로 사용 가능하다.
1=one 숫자는 String key로 인식
price=price is {0} 으로 작성하면 해당 부분을 치환할 수 있다.

 

WebConfig.class 생성

생성한 메시지를 사용하기 위해서는 config 파일을 생성해 경로를 설정해 주어야 한다.

WebConfig

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/messages/message");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public MessageSource validationMessageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/messages/validation");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(validationMessageSource());
        return bean;
    }
}

 

messageSource() 메서드에는 message.properties 경로를 설정해주고, validationMessageSource() 메서드에는 위에서 생성한 validation.properties 경로를 설정해주었다.

getValidator() 메서드에서 messageSource를 지정해주어 dto에서 메시지를 가져올 수 있다.

 

SignupRequestDto

@Getter
@Setter
public class SignupRequestDto {

    @Size(min = 4, max = 10)
    @NotBlank
    @Pattern(regexp = "^[a-z0-9]*$", message = "{userId.pattern}")
    private String userId;

    @Size(min = 8, max = 15)
    @NotBlank
    @Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,15}", message = "{password.pattern}")
    private String password;
}

 

PostMan을 통해 확인하면 비밀번호에 문제가 있을 경우 다음과 같이 message가 나타난다.

 

도중에 한글이 깨지는 문제가 있었는데, application.yml 파일에 다음을 추가해주니 해결되었다.

spring:
  messages:
    encoding: UTF-8

 

이렇게 해도 한글이 깨진다면 File > Settings > Editor > File Encodings 로 가서 

Default encoding for properties files를 UTF-8로 변경해주면 된다.

728x90

'Spring' 카테고리의 다른 글

[Spring] AWS RDS MariaDB 생성 및 SpringBoot 프로젝트 연동  (2) 2023.05.08
[Spring] AWS RDS MariaDB + Spring Boot, Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) for operation '=' 해결  (0) 2023.05.08
[Spring] @Valid @ControllerAdvice와 @ExceptionHandler 사용한 전역 예외 처리  (0) 2023.04.25
[Spring] @Valid를 사용한 객체 유효성 검증  (0) 2023.04.22
[Spring] Spring profiles 통한 DB/개인정보 .gitignore에 추가하기  (0) 2023.04.11
    'Spring' 카테고리의 다른 글
    • [Spring] AWS RDS MariaDB 생성 및 SpringBoot 프로젝트 연동
    • [Spring] AWS RDS MariaDB + Spring Boot, Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) for operation '=' 해결
    • [Spring] @Valid @ControllerAdvice와 @ExceptionHandler 사용한 전역 예외 처리
    • [Spring] @Valid를 사용한 객체 유효성 검증
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바