Spring webflux bean验证不起作用

Jan*_*tze 7 java spring bean-validation kotlin spring-webflux

我正在尝试在Webflux中使用bean验证.这是我到目前为止:

@PostMapping("contact")
fun create(@RequestBody @Valid contact: Mono<Contact>) : Mono<Contact> {
    return contact.flatMap { contactRepository.save(it) }
            .doOnError{ Error("test") }
}
Run Code Online (Sandbox Code Playgroud)

验证不起作用......我希望Error("test")会显示...

有人有一个有效的例子(Java或Kotlin)吗?

UPDATE

这是一个存储库,因此可以复制:https://github.com/jwz104/webflux-validation-test

请求:

curl --request POST \
  --url http://localhost:8080/tickets \
  --header 'content-type: application/json' \
  --data '{
    "email": "",
    "name": "",
    "message": ""
}'
Run Code Online (Sandbox Code Playgroud)

将联系人重命名为故障单,但一切都仍然相同.

zsm*_*b13 5

您在示例项目中放置的注释实际上是对Ticket类的构造函数参数的注释.对于Spring验证,您需要注释字段.您可以使用注释使用站点目标在Kotlin中执行此操作.

在这种特定情况下,您的Ticket类应如下所示:

data class Ticket(
        @field:Id
        @field:JsonSerialize(using = ToStringSerializer::class)
        val id: ObjectId = ObjectId.get(),

        @field:Email
        @field:Max(200)
        @field:NotEmpty
        val email: String,

        @field:NotEmpty
        @field:Size(min = 2, max = 200)
        val name: String,

        @field:NotEmpty
        @field:Size(min = 10, max = 2000)
        val message: String
)
Run Code Online (Sandbox Code Playgroud)

这与以下控制器功能一起工作并按预期返回错误:

@PostMapping("tickets")
fun create(@RequestBody @Valid contact: Mono<Ticket>) : Mono<Ticket> {
    return contact.flatMap { ticketRepository.save(it) }
            .doOnError{ Error("test") }
}
Run Code Online (Sandbox Code Playgroud)