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错误的错误消息。