@QueryMap передает параметры в теле

#kotlin #spring-cloud-feign #feign

Вопрос:

У меня есть простое POJO:

 class FilterDTO(
    open var page: Int = 0,
    open var size: Int = 20
)
 

И простой Притворный Клиент:

 @FeignClient(name = "feign-client", url = "${feign.url.client}")
interface FeignClient{

    @GetMapping("get/{id}")
    fun getById(@PathVariable("id") id: String, @QueryMap(encoded = true) filter: FilterDTO): Any

}
 

Согласно запросу на вытягивание № 667, я ожидал, что это будет переведено как:

 ---> GET http://my.service.com/get/123?page=0amp;size=20 HTTP/1.1
Content-Length: 64
Content-Type: application/json

---> END HTTP (64-byte body)
<--- HTTP/1.1 200 Ok (807ms)
allow: GET

// ...

{"response": "foo"}
<--- END HTTP (108-byte body)
 

Но вместо этого я получаю:

 ---> GET http://my.service.com/get/123 HTTP/1.1
Content-Length: 64
Content-Type: application/json

{"page":0,"size":2}
---> END HTTP (64-byte body)
<--- HTTP/1.1 405 Method Not Allowed (807ms)
allow: GET
cache-control: no-cache, no-store, max-age=0, must-revalidate
//..

{"timestamp":1628783721302,"status":405,"error":"Method Not Allowed","path":"/get/123"}
<--- END HTTP (108-byte body)
 

Обратите @QueryMap внимание, что параметр передается в теле запроса, а не передается как queryString .

Конечная точка, которую он пытается вызвать, определяется как:

     @GetMapping("/get/{id}")
    fun getById(
            @PathVariable("id")
            id: String,
            filter: FilterDTO
    )
 

Чего мне не хватает? Как я могу использовать @QueryMap его для передачи в качестве параметра запроса?

Ответ №1:

Выяснил, что при использовании spring-cloud-openfeign я должен использовать @SpringQueryMap вместо @QueryMap того, как указано в документах