Как отправить пустой список в качестве параметра с feign?

Я хотел бы отправить список в качестве параметра также когда он пустой с притворством.

В настоящее время у фиктивного клиента у меня есть следующий метод:

@GetMapping("/artists")
List<Artist> getArtists(@RequestParam("genre") List<Long> genre);

Проблема в том, что когда жанр является пустым списком, притворяться создает запрос GET /artists вместо GET /artists?genres=

Я пытаюсь использовать один и тот же uri /artists для нескольких запросов, различая их только по параметрам запроса, например GET /artists?genre=1,2,4GET /artists?popularity=89 все сопоставляются с разными методами.

Как я могу отправить пустые списки в качестве параметра с feign?

1
0
1 200
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы испытываете, — это разница между параметрами empty и параметрами undefined. Feign лучше всего придерживается RFC 6570 — шаблоны Uri при расширении параметров uri. На данный момент поддерживается только Simple Expansion. В спецификации указано, что при работе с неопределенными значениями и списками:

2.3 Переменные

A variable defined as a list value is considered undefined if the list contains zero members.

3.2.1 Расширение переменных

A variable that is undefined (Section 2.3) has no value and is ignored by the expansion process. If all of the variables in an expression are undefined, then the expression's expansion is the empty string.

При предоставлении пустого списка значения undefined и undefined по определению игнорируются, в результате чего параметр вообще не включается. Если вы хотите включить параметр, независимо от того, содержит ли список какие-либо значения, вам необходимо обновить шаблон uri:

@GetMapping("/artists?genre = ")
List<Artist> getArtists(@RequestParam("genre") List<Long> genre);

Это будет включать genre= в запрос, даже если список пуст.

Еще одно замечание: если бы Feign поддерживал шаблоны уровня 3 и 4, в частности расширение запроса стиля формы, uri можно было бы обновить до /artists{?genre}. Это позволит использовать оба сценария, но Feign в настоящее время поддерживает только шаблоны уровня 1.

Kevin Davis 20.05.2019 16:27

Другие вопросы по теме