Неверный запрос при отправке запроса WebClient из микросервиса в другой микросервис

Итак, у меня есть 5 микросервисов, работающих на разных портах. У меня есть служба под названием служба каталога фильмов, и я пытаюсь получить оценки из фильмов по идентификатору, который передается через параметры запроса. У меня также работает сервер обнаружения, который работает нормально.

Моя конечная точка моей функции выглядит так:

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

Моя конечная точка моей службы данных рейтингов выглядит так:

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

При отправке запроса на локальный хост: 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]

Когда я напрямую вызываю конечную точку сервиса ratings-data-service:

localhost: 7654/рейтинги/список?movieIds=6076bd2aa35f61406db0da84&movieIds=6076bd48a35f61406db0da85

все работает нормально, как это возможно?


person Yasin Eraslan    schedule 14.04.2021    source источник
comment
Я думаю, у вас есть ответ здесь - stackoverflow.com/questions /35695586/   -  person aksappy    schedule 14.04.2021
comment
У меня нет функции addParameters   -  person Yasin Eraslan    schedule 14.04.2021
comment
Теперь это сработало, просто нужно было правильно использовать setHost и setPath, спасибо!   -  person Yasin Eraslan    schedule 14.04.2021


Ответы (1)


Для всех, у кого есть такая проблема, с помощью аксаппи, я сделал это правильно в конце. Я должен выглядеть так:

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)
    }
person Yasin Eraslan    schedule 14.04.2021