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

如何在Swagger UI中正确使用@RequestParam Map<String,String>去除参数前缀?

解决SpringFox Swagger UI中Map类型请求参数带前缀的问题

方案一:自定义Swagger参数处理插件

通过实现SpringFox的ParameterBuilderPlugin接口,修改Map类型参数的Swagger元数据,让其生成不带前缀的独立查询参数:

  1. 创建自定义插件类:
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.ParameterBuilderPlugin;
import springfox.documentation.spi.service.contexts.ParameterContext;
import java.util.Map;

@Component
@Order(value = 1)
public class MapParameterPlugin implements ParameterBuilderPlugin {

    @Override
    public void apply(ParameterContext context) {
        Class<?> paramType = context.resolvedMethodParameter().getParameterType();
        // 判断是否为Map类型
        if (Map.class.isAssignableFrom(paramType)) {
            // 清空参数名避免生成前缀,将Map拆分为多个动态查询参数
            ParameterBuilder builder = context.parameterBuilder();
            builder.name("")
                   .modelRef(new ModelRef("string"))
                   .allowMultiple(true)
                   .parameterType("query")
                   .description("动态查询参数");
        }
    }

    @Override
    public boolean supports(DocumentationType documentationType) {
        return true;
    }
}
  1. 确保Spring能扫描到该组件,可将其放在Swagger配置类所在包下,或通过@ComponentScan指定扫描路径。

方案二:使用@ApiImplicitParams声明参数(适用于已知键名场景)

如果Map对应的参数键名固定,可直接通过Swagger注解手动声明参数,避免自动生成带前缀的格式:

@GetMapping(value = "")
@ApiImplicitParams({
    @ApiImplicitParam(name = "additionalProp1", value = "参数1", paramType = "query", dataType = "string"),
    @ApiImplicitParam(name = "additionalProp2", value = "参数2", paramType = "query", dataType = "string")
})
public String Hello(@RequestParam Map<String, String> params) {
    // 业务逻辑实现
    return "Hello";
}

这种方式下,Swagger UI会生成不带前缀的独立查询参数输入框,测试时将直接生成?additionalProp1=xxx&additionalProp2=xxx格式的请求串。

补充说明

  • 方案一适配动态不确定键名的Map参数,能自动兼容任意键值对;
  • 方案二更适合参数键名固定的场景,参数说明更清晰,可读性更强。

内容的提问来源于stack exchange,提问作者troy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:05:22