Spring webflux beanvalidation不起作用

我正在尝试在Webflux中使用beanvalidation。 这是我迄今为止:

@PostMapping("contact") fun create(@RequestBody @Valid contact: Mono) : Mono { return contact.flatMap { contactRepository.save(it) } .doOnError{ Error("test") } } 

validation不起作用…我期望的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": "" }' 

将联系人重命名为ticket,但是一切仍然相同。

您在示例项目中放置的注释实际上是对Ticket类的构造函数参数的注释。 对于Springvalidation,您需要注释字段。 您可以使用注释use-site目标在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 ) 

这和下面的控制器函数一起工作,并按预期返回错误:

 @PostMapping("tickets") fun create(@RequestBody @Valid contact: Mono) : Mono { return contact.flatMap { ticketRepository.save(it) } .doOnError{ Error("test") } } 

您还需要添加bindingResult: BindingResult作为一个额外的参数。 当方法开始时,你可以做一些像bindingResult.isValid() 。 我们在所有控制器方法上使用一个方面来向用户返回带有validation错误的错误消息。