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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

[TIL - 20230427] message properties 사용한 @Valid 메시지 처리
TIL

[TIL - 20230427] message properties 사용한 @Valid 메시지 처리

2023. 4. 27. 12:57

 

💻문제점

@Valid 를 통해 유효성 검사를 할 때 ExceptionAdvisor를 통해 클라이언트로 응답 메시지를 보내지만, 메시지가 마음에 들지 않았다. 

 

비밀번호의 패턴이 올바르지 않을 때 다음과 같은 메시지를 출력한다.

 

@ControllerAdvice
public class ExceptionAdvisor {

    /**
     * Valid 예외 처리
     */
    @ExceptionHandler({MethodArgumentNotValidException.class, HttpMessageNotReadableException.class})
    public ResponseEntity signValidException(MethodArgumentNotValidException exception) {
        BindingResult bindingResult = exception.getBindingResult();

        StringBuilder builder = new StringBuilder();

        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            builder.append("[");
            builder.append(fieldError.getField());
            builder.append("] ");
            builder.append(fieldError.getDefaultMessage());
        }

        return new ResponseEntity(ResponseDto.setBadRequest(builder.toString()), HttpStatus.OK);
    }
}

 

그래서 valid를 할 때 message를 작성하여 넘겨주었다.

@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;
}

 

하지만 이렇게 되면 하드코딩이 되어버리기 때문에 다른 방법을 찾고 싶었다.


📃시도

에러 메시지를 갖는 Enum Class를 만들어 message에 넣어주고 싶었지만 잘 안됐다.

public enum ValidMessage {
    Password("비밀번호는 8~15자 영문 대 소문자, 숫자, 특수문자를 사용하세요.");

    private String message;

    ValidMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

🔍해결

기술 매니저님께 valid에 대한 메시지 처리를 어떻게 하면 좋을지 여쭈어 보았고 message properties를 알게 되었다.

validation 메시지를 경로를 내가 만든 properties 파일 경로로 설정하여 메시지를 가져올 수 있다.

https://yeon-dev.tistory.com/164

 

[Spring] @Valid 메시지 message properties 사용하기

데이터 유효성 검증을 위해 다음과 같이 메시지를 하드 코딩했다. SignupRequestDto @Getter @Setter public class SignupRequestDto { @Size(min = 4, max = 10) @NotBlank @Pattern(regexp = "^[a-z0-9]*$") private String userId; @Size(min =

yeon-dev.tistory.com

728x90

'TIL' 카테고리의 다른 글

[TIL - 20230428] WebSocket + Stomp 적용기1  (0) 2023.04.29
[TIL - 20230428] failed to lazily initialize a collection of role  (0) 2023.04.28
[TIL - 20230426] Enum 타입 필드 검증을 위한 커스텀 애노테이션 생성  (0) 2023.04.26
[TIL - 20230420] ControllerAdvice, ExceptionHandler 전역 예외 처리  (0) 2023.04.20
[TIL - 20230419] JWT  (0) 2023.04.19
    'TIL' 카테고리의 다른 글
    • [TIL - 20230428] WebSocket + Stomp 적용기1
    • [TIL - 20230428] failed to lazily initialize a collection of role
    • [TIL - 20230426] Enum 타입 필드 검증을 위한 커스텀 애노테이션 생성
    • [TIL - 20230420] ControllerAdvice, ExceptionHandler 전역 예외 처리
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바