アノテーション

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 ターゲット (英語) を使用する必要がある場合があります。