OpenAPI Generator已实现方法调用返回501 自定义实现未生效如何解决
问题根因
你收到501响应的核心原因是:处理/endpoint请求的MyApi实例调用的getDelegate()方法默认返回匿名空实现的MyApiDelegate,没有关联到你注册到Spring容器的自定义MyApiDelegateImpl Bean。另外你当前的代码存在两处明显问题:
- 生成的
MyApiDelegate位于my.rest包,你的实现类在my.rest.api包,需确认导入的是正确的接口,不要导错包 - Maven插件配置层级错误,
inputSpec等参数不能放在configOptions节点下,同时supportingFilesToGenerate限制了仅生成ApiUtil.java,开启Delegate模式后默认生成的Controller类被过滤,导致没有自动关联自定义Delegate的逻辑
解决方案
方案一:修改插件配置,自动生成关联Delegate的Controller(推荐)
修正配置层级并删除supportingFilesToGenerate配置项,插件会自动生成MyApiController类,该类会自动注入Spring容器中所有MyApiDelegate类型的Bean,直接使用你自定义的实现类。修改后的插件配置示例:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>4.3.1</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/latest.yaml</inputSpec> <generatorName>spring</generatorName> <apiPackage>my.rest.api</apiPackage> <modelPackage>my.rest.model</modelPackage> <configOptions> <delegatePattern>true</delegatePattern> <useBeanValidation>false</useBeanValidation> </configOptions> </configuration> </execution> </executions> </plugin>
方案二:手动实现Controller关联自定义Delegate
如果你不想修改插件生成逻辑,可以手动编写MyApi接口的实现类作为Controller,注入你的Delegate实现:
package my.rest.api; import my.rest.MyApiDelegate; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; @RestController @RequiredArgsConstructor public class MyApiController implements MyApi { // 注入你自定义的Delegate实现 private final MyApiDelegate myApiDelegate; @Override public MyApiDelegate getDelegate() { // 重写getDelegate方法返回你的实现类实例 return myApiDelegate; } }
验证注意事项
确认MyApiDelegateImpl上的@Service注解能被Spring的组件扫描覆盖到,若启动类不在my包上层,需手动添加@ComponentScan("my.rest")配置。重启应用后重新发送POST请求,即可触发自定义的doSmth方法逻辑。
内容的提问来源于stack exchange,提问作者obolen_an
相关产品推荐
相关产品推荐

