アノテーション
Spring Framework は、required
属性を明示的に定義しなくても、Kotlin null-safety (英語) を利用して HTTP パラメーターが必要かどうかを判断します。つまり、@RequestParam name: String?
は不要として扱われ、逆に @RequestParam name: String
は必要として扱われます。この機能は、Spring メッセージング @Header
アノテーションでもサポートされています。
同様に、@Autowired
、@Bean
、@Inject
を使用した Spring Bean インジェクションは、この情報を使用して、Bean が必要かどうかを判別します。
例: @Autowired lateinit var thing: Thing
は、Thing
型の Bean をアプリケーションコンテキストに登録する必要があることを意味しますが、Bean が存在しない場合、@Autowired lateinit var thing: Thing?
はエラーを発生させません。
同じ原則に従って、@Bean fun play(toy: Toy, car: Car?) = Baz(toy, Car)
は、型 Toy
の Bean をアプリケーションコンテキストに登録する必要があることを意味しますが、型 Car
の Bean は存在する場合と存在しない場合があります。同じ動作は、オートワイヤーされたコンストラクターパラメーターにも適用されます。
プロパティまたはプライマリコンストラクターパラメーターを持つクラスで Bean 検証を使用する場合、この Stack Overflow レスポンス (英語) で説明されているように、@field:NotNull や @get:Size(min=5, max=15) などのアノテーション use-site ターゲット (英語) を使用する必要がある場合があります。 |