Mind and Hand Help

Coding Tips

Field Annotations

在 Kotlin 中对同一个属性使用多个注解,有两种常见写法:

  1. 逐个写(最直观)

data class SyncDTO( @field:NotBlank @field:Size(max = 64) var stable: String, @field:NotNull @field:PastOrPresent var startTime: Date, @field:NotNull @field:FutureOrPresent var endTime: Date )
  1. 同一使用位置用"方括号聚合"

  • 当多个注解都贴在同一个使用位置(如都贴到 field)时,可以用方括号一次性写

data class SyncDTO( @field:[NotBlank Size(max = 64)] var stable: String, @field:[NotNull PastOrPresent] var startTime: Date, @field:[NotNull FutureOrPresent] var endTime: Date )

混合不同使用位置

如果不同注解需要贴到不同的位置(比如有的要贴 field ,有的要贴 get ),就分别指明:

data class User( @field:[NotBlank Size(max = 32)] @get:Schema(description = "用户名") val name: String )
  • 上面 NotBlank、Size 贴在字段;Schema 贴在 getter。

校验分组与嵌套校验

分组

interface Create interface Update data class Dto( @field:NotBlank(groups = [Create::class]) @field:Size(max = 64, groups = [Create::class, Update::class]) val code: String )

嵌套对象列表校验

import jakarta.validation.Valid import jakarta.validation.constraints.* data class Order( @field:NotNull @field:Size(min = 1) @field:Valid // 确保嵌套对象也会被校验 val items: List<OrderItem> )
27 January 2026