[스프링][코틀린] validation이 안될 때 확인해볼 것

프로그래밍/서버2021. 5. 30. 12:45

Kotlin으로 @Valid를 사용하려고 하니 잘 안됐습니다.

 

몇 가지 확인해볼 것을 아래에 정리합니다.

 

1. data class의 생성자에 제약 조건을 걸지 않았는지 체크

//잘못된 코드
data class UserInfoDto (
    @NotEmpty(message="이메일 주소를 입력하세요")
    @NotBlank
    @Email(message="이메일 주소가 올바르지 않습니다")
    var email : String?,
    var password : String?,
    var role : String?,
)
//올바른 코드
data class UserInfoDto (
    @field:NotEmpty(message="이메일 주소를 입력하세요")
    @field:NotBlank
    @field:Email(message="이메일 주소가 올바르지 않습니다")
    var email : String?,
    var password : String?,
    var role : String?,
)

2. 적절한 곳에 @Valid 사용했는지 체크

 @RequestMapping(value = ["/signup"], method = [RequestMethod.POST])
    fun signupProcessing(modelAndView: ModelAndView, @Valid infoDto: UserInfoDto, bindingResult: BindingResult): ModelAndView

회원가입 요청을 받을 때 체크를 하도록 하는 코드

 

3. <arg>-Xemit-jvm-type-annotations</arg>

코틀린 버전이 낮으면 kotlin-maven-plugin에 <arg>-Xemit-jvm-type-annotations</arg>를 추가해야 한다고 합니다.

(https://stackoverflow.com/questions/52345291/bean-validation-not-working-with-kotlin-jsr-380)

 

저는 코틀린 1.4.31 버전을 써서 그런지 위의 코드가 없어도 정상 동작을 하네요.

위의 코드를 추가해야 generics에 대한 규칙도 체크를 하므로 넣는게 좋겠습니다.

4. dependency 체크

intelliJ에서 생각없이 dependency를 추가하다 보니 아래의 의존성이 추가됐었습니다.

<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>2.0.2</version>
</dependency>

이러면 Validation이 동작을 안합니다.

 

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

위의 의존성이 추가됐는지 확인합시다.

 

참고

https://stackoverflow.com/questions/36515094/kotlin-and-valid-spring-annotation

 

kotlin and @Valid Spring annotation

I have an entity: class SomeInfo( @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) var value: String) { var id: Long? = null } And controller method: @RequestMapping(value = "/som...

stackoverflow.com

https://www.baeldung.com/spring-boot-bean-validation

 

작성자

Posted by 드리머즈

관련 글

댓글 영역