Spring

컨트롤러 메서드의 requestBody에서 스프링 부트 @Valid가 작동하지 않음

기록만이살길 2022. 11. 29. 23:37
반응형

컨트롤러 메서드의 requestBody에서 스프링 부트 @Valid가 작동하지 않음

1. 질문(문제점):

@Validated 어노테이션이 달린 @RestController에서 @Valid 어노테이션이 달린 간단한 요청 본문의 유효성을 검사하려고 합니다. 유효성 검사는 요청의 기본 변수(아래 예의 연령)에서 올바르게 작동하지만 pojo 요청 본문에서는 작동하지 않습니다. @Valid 어노테이션은 요청 본문 Person 클래스에 영향을 미치지 않습니다(즉, 컨트롤러는 공백 이름 및 18세 미만 연령 허용).

사람 등급:

import javax.validation.constraints.Min
import javax.validation.constraints.NotBlank

class Person (

    @NotBlank
    val name : String,

    @Min(18)
    val age : Int
)

컨트롤러 클래스:

import org.springframework.validation.annotation.Validated
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController
import javax.validation.Valid

@RestController
@Validated
class HomeController {

    @GetMapping("/{age}")
    fun verifyAge(@PathVariable("age") @Min(18) age:Int): String {
        return "Eligible age."
    }

    @PostMapping
    fun personValidation(@Valid @RequestBody person : Person) : String {
        return "No validation error"
    }
}

@NotBlank, @Min 및 @Valid 어노테이션은 아래 의존성에서 가져왔습니다.

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

@Validated 컨트롤러의 Person 요청 본문에서 @Valid를 작동시키는 방법은 무엇입니까?

2. 해결방안:

[편집됨] 이것은 사용자 중 한 사람이 대답한 대로 (생성자 인수에 필드 어노테이션 추가) 저에게도 효과적이었습니다.

import javax.validation.constraints.Min
import javax.validation.constraints.NotBlank

class Person (

    @field:NotBlank
    val name : String,

    @field:Min(18)
    val age : Int
)

Person의 "kotlin" 클래스 정의를 아래와 같이 변경했지만(인수가 없는 생성자 인수)(괄호(...)를 중괄호{...}로 참고) @field 어노테이션을 넣지 않고도 작동했습니다.

import javax.validation.constraints.Min
import javax.validation.constraints.NotBlank

class Person {

    @NotBlank
    lateinit var name: String

    @Min(18)
    var age: Int = 0
}
반응형