如何使用伪装发送空列表作为参数?

时间:2019-05-08 08:38:24

标签: spring spring-cloud-feign feign

我想发送一个列表作为参数,当列表为空时带有伪装。

目前在假装客户处,我有以下方法:

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

问题在于,当体裁为空列表时,假装创建请求GET /artists而不是GET /artists?genres=

我正在尝试对多个请求使用相同的uri /artists,仅通过查询参数来区分它们,例如 GET /artists?genre=1,2,4 GET /artists?popularity=89都被映射到不同的方法。

如何发送带有伪装的空列表作为参数?

1 个答案:

答案 0 :(得分:1)

您遇到的是empty参数和undefined参数之间的区别。 Feign最好在扩展uri参数时遵守RFC 6570 - Uri Templates。目前,仅支持简单扩展。规范指出,在处理未定义的值和列表时:

2.3 Variables

  

如果定义为列表值的变量被认为是未定义的     列表包含零个成员。

3.2.1 Variable Expansion

  

未定义的变量(第2.3节)没有值,并且是     在扩展过程中被忽略。如果所有变量都在     表达式未定义,则表达式的扩展为     空字符串。

通过提供一个空列表,根据定义,它undefinedundefined值被忽略,从而导致根本不包含该参数。如果要包括参数,则无论列表中是否包含任何值,都需要更新uri模板:

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

即使列表为空,这也将在请求中包含genre=