对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

注解

Spring 框架还利用 Kotlin 空安全 来确定 HTTP 参数是否为必填项,而无需显式定义 required 属性。这意味着 @RequestParam name: String? 被视为不是必填项,相反, @RequestParam name: String 被视为必填项。此功能也适用于 Spring 消息处理中的 @Header 注解。spring-doc.cadn.net.cn

以类似的方式,使用 @Autowired@Bean@Inject 的 Spring bean 注入会利用此信息来确定 bean 是否为必需的。spring-doc.cadn.net.cn

例如,@Autowired lateinit var thing: Thing 表示必须在应用上下文中注册一个类型为 Thing 的 Bean,而 @Autowired lateinit var thing: Thing? 如果没有这样的 Bean 也不会引发错误。spring-doc.cadn.net.cn

遵循相同的原理,@Bean fun play(toy: Toy, car: Car?) = Baz(toy, Car) 表示必须在应用上下文中注册类型为 Toy 的 bean,而类型为 Car 的 bean 可能存在也可能不存在。相同的行为也适用于自动注入的构造函数参数。spring-doc.cadn.net.cn

如果您在具有属性或主构造函数参数的类上使用Bean验证,可能需要使用 注解使用站点目标, 例如 @field:NotNull@get:Size(min=5, max=15),如 此Stack Overflow回答 中所述。