次のような URL を処理するコントローラーにリクエストをマップしたいと考えています。
/weather?city=London
/weather?city=London&country=GB
都市と国はオプションのパラメータであることに注意してください。
この単純なコントローラーは次のとおりです。
@Controller("/weather")
class WeatherController(...) {
@Get(produces = [MediaType.APPLICATION_JSON])
fun getWeather(city: String?, country: String?): Flux<Any> = ...
しかし、いくつかのマッピングの問題があるようです:
java.lang.NoSuchMethodError: com.codependent.weatherapp.controller.WeatherController.getWeather(Ljava/lang/String;Ljava/lang/String;)Lreactor/core/publisher/Flux;
at com.codependent.weatherapp.controller.$WeatherControllerDefinition$$exec1.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:145)
更新:プロジェクトはGithubで入手できます。
オプションのパラメーターをマップする方法をいくつか試しましたが、どれもうまくいきませんでした:
1) 次の URI パス変数のドキュメント http://localhost:8080/weather/test1
@Get(value = "/test1{?city,country,cityIds}", produces = [MediaType.APPLICATION_JSON])
fun getWeather(city: Optional<String>, country: Optional<String>, cityIds: Optional<String>) = "The weather is...".toMono()
2)実際のリクエストパラメータマッピングなしで、オプションを示すだけ- http://localhost:8080/weather/test2
@Get(value = "/test2", produces = [MediaType.APPLICATION_JSON])
fun getWeather2(city: Optional<String>, country: Optional<String>, cityIds: Optional<String>) = "The weather is...".toMono()
3) パラメーターの null 可能性を表現するだけの Kotlin の方法- http://localhost:8080/weather/test3
@Get(value = "/test3", produces = [MediaType.APPLICATION_JSON])
fun getWeather3(city: String?, country: String?, cityIds: String?) = "The weather is...".toMono()