带有注释的 kotlin 数据类,为啥 @DateTimeFormat 注释可以在没有定位的情况下工作

Posted

技术标签:

【中文标题】带有注释的 kotlin 数据类,为啥 @DateTimeFormat 注释可以在没有定位的情况下工作【英文标题】:kotlin data class with annotations, why @DateTimeFormat annotation works without targetting带有注释的 kotlin 数据类,为什么 @DateTimeFormat 注释可以在没有定位的情况下工作 【发布时间】:2020-01-26 05:46:50 【问题描述】:
data class UserSearchRequest(
        @field:NotNull
        val active: Boolean?,
        // no targeting work
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) 
        @field:NotNull
        val registeredDate: LocalDate,
)

为什么@DateTimeFormat 注释在没有定位的情况下也能工作?

【问题讨论】:

不确定您所说的定位是什么意思。 @DateTimeFormat 引用 registeredDate 因为它是下一个字段,所以它有一个目标。 @Neil 定位我的意思是输入 '@field:' 或 '@get',指的是 kotlinlang.org/docs/reference/… 在 kotlin 数据类中,如果你没有在注解上指定目标,它将被添加到构造函数中而不是在字段本身上,所以注解不会像 @NotNull 一样不起作用是不是 【参考方案1】:

您注册了 kotlin 模块,它允许您将 jackson 注释应用于构造函数参数而无需定位,但它不适用于 Java 验证,如 NotNull 注释

【讨论】:

以上是关于带有注释的 kotlin 数据类,为啥 @DateTimeFormat 注释可以在没有定位的情况下工作的主要内容,如果未能解决你的问题,请参考以下文章

带有 Kotlin 的 Spring Boot - @Value 注释未按预期工作

如何使用 java / kotlin 中的注释处理将方法附加到现有类?

Kotlin - 数据类实体抛出 ***Error

对 kotlin 数据类使用 Jackson @JsonProperty 注释

为啥 Kotlin 数据类可以在 Gson 的不可空字段中包含空值?

使用 Kotlin 数据类的 Json 解析器正确返回 json 数据,但是为啥解析器(MockK)的单元测试会失败?