注解
Spring Framework还利用了Kotlin的空安全特性来确定HTTP参数是否需要,而无需显式定义required
属性。这意味着@RequestParam name: String?
被视为非必需的,相反,@RequestParam name: String
被视为必需的。这个特性也支持Spring Messaging中的@Header
注解。
类似地,Spring bean注入使用@Autowired
、@Bean
或@Inject
时,也会利用这些信息来确定一个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回答中所述。 |