💻문제점
@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 |