@FeignClient заставляет @GetMapping с @RequestBody выполнять POST

У меня есть следующий контроллер REST с методом GET, у которого есть BODY, который отлично работает с тестами и почтальоном.

@RestController
@RequestMapping(value = "/xxx")
public class Controller {
    @GetMapping({"/find"})
    public LocalDateTime findMax(@RequestBody List<ObjectId> ids) {
        //return sth   
    }
}

но когда FeignClient используется для вызова службы, вместо запроса GET генерируется запрос POST (@аннотация GetMapping игнорируется)

@FeignClient
public interface CoveragesServiceResource extends CoveragesService {
    @GetMapping({"/find"})
    LocalDateTime findMax(@RequestBody List<ObjectId> ids);
}

что дает ошибку:

Request method 'POST' not supported

person jtomaszk    schedule 14.06.2018    source источник


Ответы (1)


Запрос GET технически может иметь тело, но тело не должно иметь смысла, как объяснено в этом ответе. Возможно, вы сможете объявить конечную точку GET с телом, но некоторые сетевые библиотеки и инструменты просто не будут ее поддерживать, например. Джерси можно настроить, чтобы разрешить это, но RESTEasy не может согласно этому ответу.

Было бы целесообразно либо объявить /find как POST, либо не использовать @RequestBody.

person Karol Dowbecki    schedule 14.06.2018