Converter<S, T>を使用してリクエストパラメータを任意の型に変換する

Springのコントローラが受け取る引数は基本的にあらかじめ決められた型のものしか受け付けません。 (Stringなど)

そのため、パラメータでオリジナルの型として受け取りたい場合はConverter<K, T>を使用するといいでしょう。

例えば以下のようなコントローラのメソッドと型UserIdがあるとします。 この場合、リクエストクエリに単純にパラメータを渡すだけではUserIdに変換することができず、エラーとなってしまいます。

    @GetMapping("demo")
    fun demo(
        @RequestParam userId: UserId
    ): ResponseEntity<String> {
        return ResponseEntity.ok("ok")
    }

data class UserId(
    val value: UUID
)

この時、Springで用意されているConverter<S, T>を使用することで問題を解決することができます。
以下のようなクラスを作成します。

@Component
class UserIdConverter : Converter<String, UserId> {
    override fun convert(source: String): UserId {
        return UserId(UUID.fromString(source))
    }
}

上記のようにコンポーネントを作成することで、コントローラに渡された文字列をUserId型に自動的に変換します。