Springcloud Netflix Feign参数顺序

Springcloud Netflix Feign Parameters order

有什么原因可以解释为什么在声明这样的伪接口方法时出现编译错误(Body parameters cannot be used with form parameters):

1) foo(@PathVariable("pathVariableName") String pathVariable, 
       @RequestBody List<String> anyVariable)

但是当我使用它时一切正常(切换参数顺序):

2) foo(@RequestBody List<String> anyVariable, 
       @PathVariable("pathVariableName") String pathVariable)

在当前项目中,所有其他伪造方法在前一种形式下都可以正常工作。我不知道这个信息是否重要,但这是唯一一个我尝试使用带有 @RequestBody 参数注释的列表的信息。

参数的顺序在这里很重要吗? In this case, in which situations should I pay attention to the parameters order? Feign documentation似乎按照我遇到的问题的方式使用它。

顺便说一句:我在post这里停止了我的项目几分钟,在尝试运行应用程序之前,就在得到编译成功。我不太确定上面的第二种方法在 运行 时间是否正常。刚刚顺利通过编译阶段

编辑:这不是真正的编译错误。 springboot应用启动过程中出现错误

您需要检查 url 模板字符串。如果url中不包含{pathVariableName}@PathVariable("pathVariableName")将被视为表单参数。在 feign 中,表单参数不能与主体参数 (@RequestBody) 在同一个方法中使用。这就是 1) 抛出异常的原因。

第二种情况,在验证@RequestBody注解时,feign并不知道第二个参数的存在,这个参数会被当作表单参数。所以它现在不会抛出任何异常。我不确定这是不是故意的行为,但可能是验证错误。