注解
Spring Framework 还利用 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 回答 中所述。 |