티스토리 뷰

사용자 입력 값을 프론트에서도 검증할 수 있지만 백엔드에서도 검증 할 필요가 있는 것 같아서 @Valid 를 써봄.

초반에 적용이 안되서 여러가지를 찾아보고 별짓 다함

show kotlin bytecode 로 변환해서 보는데 적용이 안되는 이유가 부모 생성자가 가장 먼저 실행되야하는게 부모 생성자 호출 전 notBlank 설정 코드가 있어서 적용이 안됨,, ㅠ 근데 또 잘 작동하길래 정리해봄ㅋ

@Valid 를 사용하기 위해 필요한 라이브러리 (build.gradle에 추가) 

implementation("org.springframework.boot:spring-boot-starter-validation")

RequestDto

data class BoardRequest(
    @field:NotBlank
    val title: String,
    @field:NotBlank
    val content: String,
    @field:NotNull
    val id: Long
)

title, content 에는 공백이 올 수 없고 id 는 Long 타입이기 때문에 NotBlank를 적용할 수 없었다. (NotBlank 는 String 에만 적용할 수 있음 ㅋ) Long 타입의 ID 에는 Notblank 대신 NotNull 을 사용하였다.

RequestDto 를 사용하는 Controller

@PostMapping("/create")
    fun createBoard(@RequestBody @Valid request: BoardRequest): BoardResponse {
        println(request.toString())
        println(request.id)
        return boardService.createBoard(request)
    }

결과

title과 content 에 공백을 넣어 요청하면 400 bad Request 가 발생한다. @NotBlank를 통해 공백을 허용하지 않았기 때문이다.

콘솔에 찍힌 로그를 보면 MethodArgumentNotValidException 가 발생한 것을 볼 수 있다. 사용자의 requestbody 를 보면 title 과 content가 @NotBlank 를 만족시키지 않기 때문에 해당 에러가 발생했다. 

@Valid 종류

1. 문자열 검증

Annotation null  "" (빈 문자열) " " 공백 적용 타입
@NotNull X O O 전부 가능
@NotEmpty X X O  charseq, 배열, 리스트
@NotBlank X X X 문자열

2. 최대 최소 검증

Annotation 설명
@DecimalMax(value = "10") 지정한 value 와 같거나 작아야함 (value 문자열 설정)
@DecimalMin(value = "10") 지정한 value 와 같거나 커야함 (value 문자열 설정)
@Max(value = 10) 지정한 value 와 같거나 작아야함 (value 정수로 설정)
@Min(value = 10) 지정한 value 와 같거나 커야함 (value 정수로 설정)

3. 범위 검증

Annotation 설명
@Positive 양수
@PositiveOrZero 0이거나 양수
@Negative 음수
@NegativeOrZero 0이거나 음수

4. 날짜/시간 검증

Annotation 설명
@Future 현재보다 미래의 날짜 및 시간
@FutureOrPresent 현재거나 미래의 날짜 및 시간
@Past 현재보다 과거의 날짜 및 시간
@PastOrPresent 현재거나 과거의 날짜 및 시간

5. Boolean 검증

Annotation 설명
@AssertTrue 항상 True
@AssertFalse 항상 False

6. 크기 검증

Annotation 설명
@Size(max = 10, min = 5) min과 같거나 크고 max와 같거나 작아야 한다

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함