我有一个这样的 micronaut API:
@Get("/")
List<Club> listClubs()
@Get("/{id}")
Club show(Long id)
在我的单元测试中,当我调用该show
方法时,listClubs()
实际上是在调用该方法。
为什么会这样?
细节:
认为我的 URL 映射一定是错误的,我开始调试 Netty 以尝试了解框架是如何构造 URL 的。
在HttpClientIntroductionAdvice
中,上下文显示 API 方法,如下所示:
Club show(Long param0)
拦截器param0
在参数映射中设置,与我方法的实际参数名称不匹配。当 URI 模板展开时,这会导致 ID 被丢弃(因此 URI 变为/
而不是/1
)。
我正在尝试遵循此示例:
https://github.com/alvarosanchez/micronaut-workshop/tree/master/ex02/solution/clubs
我的项目中有一个重要的不同之处,那就是端点设置为 at"/club"
而不是 at "/"
:
@Controller("/club")
@Client("/club")
我正在使用差异工具将我的项目与示例进行比较,但我很难找到任何其他差异(除了包名称更改)。
为什么会这样?我应该寻找什么?
谢谢
更新:
用浏览器测试了目标端点 - 看起来不错。
Gradle clean 不能解决问题。
我从使用 IntelliJ 调试 Application 类切换到使用“gradlew run”,在此过程中,我对 build.gradle 进行了更改(从 gradle CLI 添加 JVM 属性传递)。我还尝试在 IDE 中启用/禁用注释处理器。(注意:在之前的项目中,我一导入 IDE 就启用了注解处理。在这个项目中,我直到出现问题才启用它。)
我认为 build.gradle 更改导致问题消失。由于问题出现不可靠,因此很难确定这是否是导致问题得到修复的更改。