You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot @PathVariable异常:Swagger无参数框+反射报错

问题原因及解决方案

核心原因

异常信息已经明确指出:Java编译时未保留方法参数名,导致Spring无法通过反射获取@PathVariable对应的参数名称。

默认情况下,Java编译器不会将方法的原始参数名编译到class文件中,Spring在处理未显式指定value/name属性的@PathVariable时,需要通过反射获取参数名来匹配URL路径中的占位符。如果没有参数名信息,就会抛出这个IllegalArgumentException。

你的另一个同结构项目能正常运行,大概率是因为它的编译配置中添加了-parameters编译选项,该选项会让编译器保留原始参数名到class文件中。

解决方案

方案1:添加编译参数-parameters

这是根治问题的方式,确保编译时保留参数名:

Maven项目(修改pom.xml)

在maven-compiler-plugin中添加编译器参数:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version> <!-- 版本可根据你的项目调整 -->
            <configuration>
                <source>17</source> <!-- 对应你的JDK版本 -->
                <target>17</target>
                <compilerArgs>
                    <arg>-parameters</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

Gradle项目(修改build.gradle)

添加编译参数配置:

tasks.withType(JavaCompile) {
    options.compilerArgs << '-parameters'
}

配置完成后,执行clean compile重新编译项目,问题即可解决,Swagger也会正常显示@PathVariable的参数输入框。

方案2:显式指定@PathVariable的参数名

如果暂时不想调整编译配置,可以给@PathVariable显式指定匹配的路径占位符名称,比如:

@GetMapping(value = "/id/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public DavinciApiResponse<CurrencyDTO> findById(@PathVariable("id") Integer id) {
    return currencyInboundAdapterRestImpl.findById(id);
}

@GetMapping(value = "/code/{code}", produces = MediaType.APPLICATION_JSON_VALUE)
public DavinciApiResponse<CurrencyDTO> findByCode(@PathVariable("code") String code) {
    return currencyInboundAdapterRestImpl.findByCode(code);
}

这种方式不需要依赖编译时的参数名信息,Spring会直接使用你指定的名称匹配路径占位符,同时Swagger也能识别到参数。

补充说明

移除@PathVariable后仍报错,是因为Spring会把该参数视为请求参数(@RequestParam),但同样需要获取参数名,还是会触发相同的反射问题。只有解决参数名可获取的问题,才能彻底消除报错。

内容的提问来源于stack exchange,提问作者Paul Marcelin Bejan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:43:31