-
[Spring Boot] 값 검증하기 - Spring Validation개발/개발일지 2023. 12. 4. 15:46
프로젝트에서 회원가입을 구현하기 위해서 필요한 정보를 dto로 전송받고 있었다.
signUp(@RequestBody SignUpDto dto) {
public record SignUpDto( String email, String handle, String username, String password ) { }
코틀린에서는 String타입에 null이 들어갈 수 없기 때문에 모든 필드를 작성해야 하지만, 자바에서는 몇 필드가 없거나 null이어도 그대로 null값으로 전송된다. portpolent에서는 Entity의 설정에 nullable을 false로 해놨기 때문에 SQL Exception이 나고 결과적으로 500 Internal Error가 반환된다. 그렇다고 매 코드에 if를 쓰고 정규표현식을 써서 검사하기엔 반복되는 코드가 많고 지저분해진다. 그럴때 쓰는 방법이다.
Spring Validation을 사용하기 위해 의존성을 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
Validation을 사용하면 요청을 받을 때 인자들을 검수하고 조건에 맞지 않으면 400 Bad Request로 종료시킨다. validation을 활성화 하려면 controller의 인자에 @Valid를 붙여주면 된다.
signUp(@RequestBody @Valid SignUpDto dto) {
SignUpDto의 각 필드에 필요한 설정을 적용하면 끝이다.
package io.yeahx4.portpolent.dto.user; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; public record SignUpDto( @Email @Size(max = 100) @NotNull String email, @Size(min = 4, max = 20) @NotNull String handle, @Size(min = 2, max = 10) @NotNull String username, @NotNull String password ) { }
자주 쓰는 annotation
- NotNull : null이 아니여야 한다
- Size : min ~ max사이의 길이를 가져야 한다. 수의 크기와는 다르다.
- Min, Max : 숫자형의 최대, 최소를 설정한다.
- Email : 이메일 형태의 자료인지 확인한다.
- Pattern : 정규 표현식으로 검증한다.
'개발 > 개발일지' 카테고리의 다른 글
[Spring Boot] 에러 메세지 커스터마이징 하기 (0) 2023.12.14 Spring boot 초기 세팅 및 DB 연결 (2) 2023.12.03