Kotlin Spring Boot 中的控制器验证

Bar*_*osz 4 rest spring kotlin spring-boot

我有一个带有一个端点的 RestController。该端点接受数据类的对象。数据类有 2 个属性。如何确保这些属性得到验证?

我的数据类:

data class FormObject(val email: String, val age: Int)

和控制器:

@PostMapping("submit")
fun submit(@RequestBody formObject: FormObject): FormObject {
    return formObject
}
Run Code Online (Sandbox Code Playgroud)

如何确保电子邮件是电子邮件并且年龄不大于 150?谢谢,

Tod*_*odd 9

您可以为此使用 Bean 验证框架。

1)将请求对象注释为需要验证:

fun submit(@Valid @RequestBody formObject: FormObject): FormObject
           ^^^^^^
Run Code Online (Sandbox Code Playgroud)

2) 使用适当的验证注释来注释数据类的字段:

data class FormObject(
    @field:NotBlank 
    val email: String, 

    @field:Min(1) 
    @field:Max(150) 
    val age: Int
)
Run Code Online (Sandbox Code Playgroud)

请注意,您必须将注释应用于field(而不是参数),否则验证将不会以我们想要的方式发生。此外,如果我们定义age为 an Int0如果调用者不发送它,它将有一个默认值 ( ),所以我对其应用了最小验证来抵消它(假设年龄 0 不合适,YMMV)。