【问题标题】:Spring boot validation annotation not working for KotlinSpring Boot 验证注释不适用于 Kotlin
【发布时间】:2018-07-04 16:35:27
【问题描述】:

我有一个简单的 Kotlin 数据类

data class Person(val name: String, @get: Min(18) val age: Int)

我实际上是从 CSV 文件构建这个类,并使用 apache CSV 解析器读取 CSV。即使我有一些 age 字段小于 18 的数据,测试仍然没有通过错误。

这个注解似乎不适用于 Kotlin?

【问题讨论】:

  • 你的验证api是否被spring boot启用了?

标签: spring spring-boot kotlin


【解决方案1】:

您目前正在使用 Min 注释来注释构造函数参数 - 我相信您应该使用 use-site target 来注释字段,如下所示:

data class Person(val name: String, @field:Min(18) val age: Int)

【讨论】:

  • 即使我改成字段它仍然不起作用,永远不会生效。
  • 如果您使用的是 Java 类,它可以工作吗?也许这是整体验证配置的问题,而不是特定于磁盘的注释。
  • 是否需要进行额外配置才能使验证正常工作?
  • 这个问题只存在于数据类中,普通类也有效。
【解决方案2】:

尝试将注解@Validated 添加到类中(不过可能只适用于spring bean)。这些注释不会阻止设置值,它们只是允许从现有实例中获取带有验证错误列表的BindingResult。如果您需要防止设置值,您可以使用自定义委托。

 val age: Int by MyDelegates.min(18)

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 2014-08-31
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多