我有一个定义如下的函数:
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestMapping
import javax.validation.Valid
@RestController
@RequestMapping("/test")
class MyController {
@PostMapping
fun someFunction(
@Valid
@RequestBody req: SomeRequest
): RegisterRes {
...
}
}
在requestBody中,我对以下字段使用NotBlank验证:
import javax.validation.constraints.*
data class SomeRequest(
@NotBlank(message = "Field is mandatory.")
val field: String
)
然而,当我向字段传递一个带有空字符串的json对象时,该字段总是通过验证:
{
"field": ""
}
这里出了什么问题?
附加信息:
启用验证的以下启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
我甚至尝试添加了一大堆其他验证器,所有这些验证器都得到了相同的结果,即字段总是通过验证,尽管传递了一个空字符串。
// Also passes then given ""
@NotBlank(message = "Name is mandatory.")
@NotNull
@NotEmpty
@Size(min = 1)
val field: String,
事实证明,对于Kotlin,我们需要对每个"Java";带有@field的约束。例如:
@field:NotBlank
用Kotlin编写的自定义验证器不需要这个。