注解

Spring 框架还利用了Kotlin 空安全来确定 HTTP 参数是否必需,而无需显式定义required属性。这意味着@RequestParam name: String?被视为非必需,反之,@RequestParam name: String被视为必需。此功能也受 Spring Messaging @Header 注解的支持。

类似地,使用@Autowired@Bean@Inject进行 Spring Bean 注入会使用此信息来确定 Bean 是否必需。

例如,@Autowired lateinit var thing: Thing表示应用程序上下文中必须注册类型为Thing的 Bean,而@Autowired lateinit var thing: Thing?如果不存在此类 Bean,则不会引发错误。

遵循相同的原则,@Bean fun play(toy: Toy, car: Car?) = Baz(toy, Car)表示应用程序上下文中必须注册类型为Toy的 Bean,而类型为Car的 Bean 可以存在也可以不存在。相同的行为适用于自动注入的构造函数参数。

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