具有多个查询可选参数的控制器映射不起作用
Controller mapping with multiple query optional parameters not working
我想将请求映射到处理 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。
我尝试了几种映射可选参数的方法,但是 none 有效:
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) 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()
该项目没问题,IntelliJ 似乎存在问题,未能正确构建它。我更改了构建配置以将流程委托给 Gradle 并解决了问题。
感谢@James Kleeh 的支持。享受 Micronaut!
我想将请求映射到处理 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。
我尝试了几种映射可选参数的方法,但是 none 有效:
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) 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()
该项目没问题,IntelliJ 似乎存在问题,未能正确构建它。我更改了构建配置以将流程委托给 Gradle 并解决了问题。
感谢@James Kleeh 的支持。享受 Micronaut!