Spring Boot Feign requestParam, содержащий массив - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь запросить API https://transport.opendata.ch/.В этом API можно фильтровать ответ, чтобы избежать большой полезной нагрузки (используя ?fields[]=...).

Например: http://transport.opendata.ch/v1/connections?from=Lausanne&to=Zurich&fields[]=connections/from&fields[]=connections/to

Я использую Spring Boot и Feign, вот мой код:

@FeignClient(value = "transport", url = "${transport.url}")
public interface TransportClient {

    @RequestMapping(method = GET, value = "/connections", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Connections getConnections(@RequestParam("from") String from, @RequestParam("to") String to, @RequestParam("fields[]") String[] fields);

    default Connections getConnections(String from, String to) {
        return getConnections(from, to, new String[] {"connections/from", "connections/to"});
    }
}

Проблема заключается в сгенерированном запросе:

http://transport.opendata.ch/v1/connections?from=Lausanne&to=Zurich&fields%5B%5D=connections%2Ffrom%2Cconnections%2Fto

Как видите, URL закодирован, а массив неправильно привязан (используется запятая вместо нескольких fields в URL).

IsЕсть ли способ добиться этого?Если это невозможно сделать с помощью FeignClient (Spring), возможно, с помощью Feign это возможно?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Ваш типичный запрос выглядит так:

 /api?fields=1&fields=2&fields=3

или

 /api?fields=1,2,3

И метод контроллера:

@RequestMapping(method = GET, value = "/api", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
Connections getConnections(@RequestParam("fields") List<String> fields)
0 голосов
/ 27 мая 2018

Я только что нашел решение:

@FeignClient(value = "transport", url = "${transport.url}")
public interface TransportClient {

    @RequestMapping(method = GET, value = "/connections?fields[]=connections/from&fields[]=connections/to", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Connections getConnections(@RequestParam("from") String from, @RequestParam("to") String to);
}

Мне повезло, потому что мои поля статичны, поэтому я мог бы поместить их непосредственно в URI, но как правильно обработать это универсальным способом

...