我试图查询https://transport.opendata.ch/ API。在此API中,可以过滤响应以避免大的有效负载(使用?fields[]=...
)。
我使用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"});
}
}
问题在于生成的请求:
正如您所看到的,网址已被编码且数组未正确绑定(使用逗号而不是网址中的多个fields
)。
有没有办法实现这个目标?如果用FeignClient(Spring)无法完成,可能有Feign可能吗?
感谢您的帮助。
答案 0 :(得分:1)
您的典型请求如下:
/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)
答案 1 :(得分:0)
我刚刚找到了解决方案:
@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中,但是如何以通用的方式正确处理它?</ p>