【发布时间】:2021-07-09 16:30:40
【问题描述】:
所以我有 5 个微服务在不同的端口上运行。我有一个名为电影目录服务的服务 我尝试通过请求参数传递的 id 从 Movies 中检索评级。 我也有一个发现服务器正在运行,它运行良好。
我的函数的端点如下所示:
@GetMapping("/test")
fun testFun(@RequestParam movieIds:List<String>) : Flux<Rating> {
return movieCatalogService.findRatingByMovieId(movieIds)
}
我的 findRatingByMovieId 如下所示:
fun findRatingByMovieId(movieIds: List<String>) : Flux<Rating> {
return webClient.build()
.get()
.uri { uribuilder ->
uribuilder.path("http://ratings-data-service/ratings/list")
.queryParam("movieIds", movieIds)
.build()
}
.retrieve()
.bodyToFlux(Rating::class.java)
}
我的 rating-data-service 的端点如下所示:
@GetMapping("/list")
fun findRatingsByMovieIds(@RequestParam movieIds:List<String>) : Flux<Rating> {
return ratingsDataService.findRatingsByMovieId(movieIds)
}
以及服务功能:
fun findRatingsByMovieId(movieIds:List<String>) : Flux<Rating> {
return ratingsDataRepository.findAllById(movieIds)
}
向 localhost:8080/catalog/test?movieIds=6076bd2aa35f61406db0da84&movieIds=6076bd48a35f61406db0da85 发送请求时
我得到了错误
这样的 IntelliJ 控制台:
400 Bad Request from UNKNOWN
at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:179) ~[spring-webflux-5.3.5.jar:5.3.5]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ 400 from GET localhost:7654/ratings/list?movieIds=6076bd2aa35f61406db0da84&movieIds=6076bd48a35f61406db0da85 [DefaultWebClient]
|_ checkpoint ⇢ Handler io.eraslan.moviecatalogservice.controller.MovieCatalogController#testFun(List) [DispatcherHandler]
|_ checkpoint ⇢ HTTP GET "/catalog/test?movieIds=6076bd2aa35f61406db0da84&movieIds=6076bd48a35f61406db0da85" [ExceptionHandlingWebHandler]
当我直接调用 rating-data-service 端点时:
localhost:7654/ratings/list?movieIds=6076bd2aa35f61406db0da84&movieIds=6076bd48a35f61406db0da85
一切正常,这怎么可能?
【问题讨论】:
-
我想你在这里有答案 - stackoverflow.com/questions/35695586/…
-
我没有addParameters功能
-
现在可以了,只需要正确使用setHost和setPath,谢谢!
标签: java spring kotlin spring-webclient