【问题标题】:Bad Request when sending a WebClient request from a microservice to another microservice将 WebClient 请求从微服务发送到另一个微服务时出现错误请求
【发布时间】: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

一切正常,这怎么可能?

【问题讨论】:

标签: java spring kotlin spring-webclient


【解决方案1】:

对于遇到这种问题的每个人,在aksappy的帮助下,我最终做到了。它必须看起来像这样:

fun findRatingByMovieId(movieIds: List<String>) : Flux<Rating> {
        return webClient.build()
            .get()
            .uri { uribuilder ->
                uribuilder.host("ratings-data-service")
                    .path("/ratings/list")
                    .queryParam("movieIds",movieIds)
                    .build()
            }
            .retrieve()
            .bodyToFlux(Rating::class.java)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2020-06-01
    • 1970-01-01
    • 2018-12-15
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多