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

Spring OpenApi Generator 6.6.0:Delegate与Controller生成及映射冲突解决

解决Spring OpenApi Generator 6.6.0版本Controller映射冲突问题

方案一:禁止生成Controller上的@RequestMapping注解

在你的openApiGenerate任务的configOptions中添加controllerRequestMapping: "false"配置,生成的Controller类将不再自动添加@RequestMapping注解,直接避免路径冲突:

openApiGenerate {
    generatorName = "spring"
    inputSpec = "$projectDir/src/main/resources/openapi.yaml"
    outputDir = "$buildDir/generated"
    apiPackage = "com.myapp.web.api.controller"
    invokerPackage = "com.myapp.web.api.invoker"
    modelPackage = "com.myapp.web.api.model"
    modelNamePrefix = "Dto"
    configOptions = [
            openApiNullable: "false",
            useSwaggerUI: "false",
            delegatePattern: "true",
            useTags: "true",
            implicitHeaders: "true",
            additionalModelTypeAnnotations: "@lombok.AllArgsConstructor;@lombok.NoArgsConstructor;@lombok.Builder(toBuilder = true)",
            performBeanValidation: "true",
            generatedConstructorWithRequiredArgs: "false",
            // 新增配置:禁用Controller类上的@RequestMapping注解
            controllerRequestMapping: "false"
    ]
}

方案二:统一配置API基础路径

如果需要保留基础路径映射,可在openapi.yaml中通过servers节点全局指定基础路径,替代生成的@RequestMapping:

openapi: 3.0.3
servers:
  - url: /api/v1
    description: 默认服务路径
# 其他OpenAPI配置内容...

同时在configOptions中补充basePath: "/api/v1",确保生成的接口方法路径自动拼接全局基础路径,避免重复映射。

方案三:自定义Controller实现

开启interfaceOnly: "true"仅生成API接口,自行编写Controller类实现接口并手动控制路径映射,完全掌控路由规则:

configOptions = [
        // 其他配置...
        interfaceOnly: "true"
]

手动创建Controller类示例:

@RestController
@RequestMapping("/custom-stuff")
public class CustomStuffApiController implements StuffApi {
    private final StuffApiDelegate delegate;

    public CustomStuffApiController(StuffApiDelegate delegate) {
        this.delegate = delegate;
    }

    // 实现接口方法,直接调用delegate对应逻辑
    @Override
    public ResponseEntity<DtoStuff> getStuff(@PathVariable String id) {
        return delegate.getStuff(id);
    }
}

额外排查点

  • 检查openapi.yaml中是否存在重复的路径或标签定义,导致生成的Controller路由冲突
  • 确认项目中已有自定义Controller的路径,是否与生成的Controller路径重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:17:19