我想发送一个列表作为参数,当列表为空时带有伪装。
目前在假装客户处,我有以下方法:
@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
都被映射到不同的方法。
如何发送带有伪装的空列表作为参数?
答案 0 :(得分:1)
您遇到的是empty
参数和undefined
参数之间的区别。 Feign最好在扩展uri参数时遵守RFC 6570 - Uri Templates。目前,仅支持简单扩展。规范指出,在处理未定义的值和列表时:
如果定义为列表值的变量被认为是未定义的 列表包含零个成员。
未定义的变量(第2.3节)没有值,并且是 在扩展过程中被忽略。如果所有变量都在 表达式未定义,则表达式的扩展为 空字符串。
通过提供一个空列表,根据定义,它undefined
和undefined
值被忽略,从而导致根本不包含该参数。如果要包括参数,则无论列表中是否包含任何值,都需要更新uri模板:
@GetMapping("/artists?genre=")
List<Artist> getArtists(@RequestParam("genre") List<Long> genre);
即使列表为空,这也将在请求中包含genre=
。