java - Spring webflux bean验证不起作用

标签 java spring kotlin bean-validation spring-webflux

我正在尝试在 Webflux 中使用 bean 验证。这是我目前所拥有的:

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

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

有人有工作示例(Java 或 Kotlin)吗?

更新

这是一个存储库,因此可以复制: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 类的构造函数参数的注解。对于 Spring 验证,您需要对字段进行注释。您可以使用 annotation use-site targets 在 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
)

这与以下 Controller 功能将按预期工作并返回错误:

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

关于java - Spring webflux bean验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48439953/

相关文章:

java - 如何在 Java 中修剪字符串中的 Unicode\u0085 字符

java - 简单的天气预报 Java 代码

gradle - 兄弟项目似乎没有使用它的依赖的 build.gradle 脚本

Java模板问题

java - 如何对我的顺序 Java 代码进行多线程处理

java - 原因: no instance(s) of type variable(s) T exist so that void conforms to using mockito

java - 如何解析带有数字时区偏移的时间戳?

android - 每天在Kotlin,Android Studio中将值重置为0吗?

java - Spring声明式事务管理不起作用

java - 请求处理失败;嵌套异常是 org.hibernate.type.SerializationException : could not deserialize