是否有任何理由可以解释为什么在声明这样的假装接口方法时出现编译错误(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
参数注释的列表的唯一信息。
参数的顺序是否与此answer一样重要?在这种情况下,我应该在哪些情况下注意参数顺序?假设documentation似乎以我遇到问题的方式使用它。
顺便说一下:在成功编译之后,我停止了我的项目几分钟,在此处发布了这个,然后尝试运行应用程序。我不确定上面的第二种方法在运行时是否正常工作。它只是在编译阶段完成而没有错误。
编辑:这不是一个真正的编译错误。在springboot应用程序的启动过程中发生错误。
答案 0 :(得分:2)
您需要检查您的网址模板字符串。如果网址中不包含{pathVariableName}
,则@PathVariable("pathVariableName")
将被视为表单参数。在假设中,表单参数不能与同一方法中的body参数(@RequestBody
)一起使用。这就是1)抛出异常的原因。
在第二种情况下,当验证@RequestBody
注释时,假装不知道是否存在将被视为表单参数的第二个参数。所以它现在不会抛出任何异常。我不确定这是否是故意行为,但可能是一个验证错误。