【发布时间】:2020-09-11 12:17:27
【问题描述】:
我正在尝试在由@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 请求正文?
【问题讨论】:
-
您应该将 BindingResult 声明为方法参数。之后,您将像这样进行验证: if(bindingResult.hasErrors()) {...}
-
我只想使用注释和标准验证器提供程序(如 springframework 或 hibernate)进行验证,而无需任何编程方式,例如:spring.io/guides/gs/validating-form-input。我还可以使用配置类或依赖项配置我的项目,但希望保持验证干净。此外,我的期望是仅验证 pojo 类中的原始/原始值。
-
此示例使用 BindingResult。在他们的 github 存储库中查看:github.com/spring-guides/gs-validating-form-input/blob/…
标签: spring spring-boot validation kotlin