jpa*_*vel 2 netflix-feign spring-cloud-netflix
有什么原因可以解释为什么Body parameters cannot be used with form parameters在声明如下所示的假接口方法时出现编译错误():
1) foo(@PathVariable("pathVariableName") String pathVariable,
@RequestBody List<String> anyVariable)
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时一切正常(切换参数顺序):
2) foo(@RequestBody List<String> anyVariable,
@PathVariable("pathVariableName") String pathVariable)
Run Code Online (Sandbox Code Playgroud)
在当前项目中,所有其他 feign 方法在前一种形式下都可以正常工作。我不知道这些信息是否重要,但这是我尝试使用带@RequestBody参数注释的列表的唯一信息。
参数的顺序在这里重要吗?就像这个答案一样?那么什么情况下需要注意参数顺序呢?Feign文档似乎按照我遇到问题的方式使用它。
顺便说一句:在尝试运行应用程序之前,我停止了我的项目几分钟,将其发布到这里顺便说一句:在成功编译我不太确定上面的第二种方法在运行时是否正常工作。刚刚通过编译阶段,没有错误。
编辑:这并不是真正的编译错误。该错误发生在springboot应用启动过程中。
您需要检查您的 url 模板字符串。{pathVariableName}如果url 中不包含,@PathVariable("pathVariableName")将被视为表单参数。在 feign 中,表单参数不能与主体参数 ( @RequestBody) 在同一方法中使用。这就是 1) 抛出异常的原因。
在第二种情况下,当验证@RequestBody注解时,feign不知道第二个参数是否存在,该第二个参数将被视为表单参数。所以它现在不会抛出任何异常。我不确定这是否是故意行为,但可能是一个验证错误。
| 归档时间: |
|
| 查看次数: |
1729 次 |
| 最近记录: |