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
型に自動的に変換します。