环境版本
- JDK21
- spring-webmvc 6.1.14
问题现象
🔍 先说错误原因
@PathVariable
使用问题(Java高版本17+存在问题)
原始方法:
@GetMapping("/{id}")
public Book getBookById(@PathVariable Integer id) {
return bookService.getBookById(id);
- 方法参数未指定
@PathVariable("id")
- Spring 无法解析参数名称,需要手动指定
- Maven 编译未启用 -parameters 参数
- Spring 需要这个参数来自动推断参数名称,否则必须手动写
@PathVariable("id")
- Spring 需要这个参数来自动推断参数名称,否则必须手动写
✅ 解决方案
1️⃣ 显式指定 @PathVariable(“id”)
你的方法可能是这样:
@GetMapping("/{id}")
public Book getBookById(@PathVariable Integer id) { // ❌ 可能会报错
return bookService.getBookById(id);
}
请修改为:
@GetMapping("/{id}")
public Book getBookById(@PathVariable("id") Integer id) { // ✅ 显式指定 "id"
return bookService.getBookById(id);
}
2️⃣ 启用 -parameters 编译参数
如果不想手动写 @PathVariable("id")
,你需要修改 Maven 配置:
🔹 修改 pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>21</source> <!-- 或者 17,根据你的 JDK 版本 -->
<target>21</target>
<compilerArgs>
<arg>-parameters</arg> <!-- 重点! -->
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
📌 结论
🎯 必须满足以下两点之一
✅ 方式 1(手动写 @PathVariable("id")
)
✅ 方式 2(在 pom.xml
里加 -parameters
参数)