我正在尝试验证由 @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")
如何使 @Valid 在 @Validated 控制器中的 Person 请求主体上工作?
不要将 Person 标记为 Spring @Component。
实现字段验证的正确方法是将@field 添加到您的属性中。
示例代码:
class SomeRequest(
@field:NotBlank val name: String
)
发生这种情况是因为 Spring Boot 需要将此注释应用于字段。 Kotlin 默认将它们应用于构造函数参数。看注释使用站点目标 https://kotlinlang.org/docs/annotations.html#annotation-use-site-targets关于 Kotlin 文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)