簡體   English   中英

將 WebClient 請求從微服務發送到另一個微服務時出現錯誤請求

[英]Bad Request when sending a WebClient request from a microservice to another microservice

所以我有 5 個微服務在不同的端口上運行。 我有一個名為 movie-catalogue-service 的服務,我嘗試通過請求參數傳遞的 id 從 Movies 中檢索評級。 我也有一個發現服務器正在運行,它工作正常。

我的 function 的端點如下所示:

@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)
    }

以及服務 function:

 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 端點時:

本地主機:7654/ratings/list?movieIds=6076bd2aa35f61406db0da84&movieIds=6076bd48a35f61406db0da85

一切正常,這怎么可能?

對於遇到這種問題的每個人,在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)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM