当前位置: 首页 > 知识库问答 >
问题:

OpenAPI生成器为实现的方法返回501

孙嘉悦
2023-03-14

我已经用openAPI生成器maven插件生成了rest api,并且我已经从MyApiDelegate接口重写了默认方法,但是/endpoint上的POST请求提供了501,没有实现,就好像我没有在MyApiDelegateImpl中给出该方法的我自己的实现一样。

Maven插件配置:

<plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <version>4.3.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <configOptions>
   <inputSpec>${project.basedir}/src/main/resources/latest.yaml</inputSpec>
                            <generatorName>spring</generatorName>
                            <apiPackage>my.rest.api</apiPackage>
                            <modelPackage>my.rest.model</modelPackage>
                       <supportingFilesToGenerate>ApiUtil.java</supportingFilesToGenerate>
                                <delegatePattern>true</delegatePattern>
                                <useBeanValidation>false</useBeanValidation>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
</plugin>
/* code generated by plugin */
package my.rest;
public interface MyApiDelegate {
    default Optional<NativeWebRequest> getRequest() {
        return Optional.empty();
    }

    default ResponseEntity<Void> doSmth(Smth smth) {
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }

}

package my.rest.api;
public interface MyApi {
    default MyApiDelegate getDelegate() {
        return new MyApiDelegate() {};
    }

    /*...Api operations annotations...*/
    @RequestMapping(value = "/endpoint",
        produces = { "application/json" }, 
        consumes = { "application/json", "application/xml" },
        method = RequestMethod.POST)
    default ResponseEntity<Void> doSmth(@ApiParam(value = "" ,required=true) @RequestBody Smth smth) {
        return getDelegate().doSmth(smth);
    }

}

我的实现:

package my.rest.api;
@Service
@RequiredArgsConstructor
public class MyApiDelegateImpl implements MyApiDelegate {
    private final MyService s;

    @Override
    public ResponseEntity<Void> doSmth(Smth smth) {
        s.doIt(smth);
        return ResponseEntity.ok().build();
    }
}

如何让我的程序在具体类中使用我自己的方法实现,而不是接口中提供的默认实现?

共有1个答案

岳时铭
2023-03-14

直接实现MyApi接口以及其中的方法doSmth,是实现这一点的一种方法。您的具体类不需要所有与web相关的注释,只需要参数和返回值,就像普通方法一样。

我不明白如何初始化接口MyApiDelegate,但由于getDelegate返回它的一个实现,因此调用doSmth的默认实现,它返回HttpStatus。未实施

还要注意的一件事是确保部署知道如何使用实现类。如果您使用的是SpringWeb,那么仅仅标记具体类@RestController就足够了。

 类似资料:
  • 我已经成功地从一个。yaml打开api描述符文件,但正如问题标题中所述,我希望将这些接口的响应类型从ResponseEntity更改为我自己的类型。基本上,接口没有此签名: 对于基本上以这种方式实现的方法: 我希望生成的接口尽可能简单 同样的事情,我自己定义的类,而不是

  • 生成器返回值 PHP7支持通过Generator::getReturn获取生成器方法return的返回值。 PHP5中我们约定使用Generator最后一次yield值作为返回值。 <?php final class AsyncTask { public function begin() { return $this->next(); } //

  • 我有一个Java后端,提供openapi.json规范。它的目的是可以通过openapi生成器创建一个API客户端。这就是我所做的。客户端表现得很好,每个类都是完美的,它们都有它们应该拥有的属性,等等。一个例子是这个类: 如你所见,这门课看起来很好。 然后我有一个包含以下功能的服务: 那么,在执行这个类时,我期望得到什么呢?当它返回一个项目列表时,我还希望得到一个项目列表。但我得到的却是Linke

  • 当使用带有Gradle的OpenAPI生成器时,我希望将性别化的源发送到其他源生成器插件使用的标准目录。类似于Maven生成源的东西。 到目前为止,我还不能这样做,特别是将生成限制为Java源类,而不是整个“原型项目”。 似乎OpenAPI Gradle插件的工作流程与Maven插件的工作流程并不相同。 是否有配置标志来省略所有非java代码的生成,并在“生成的源代码”文件夹(如/out/prod

  • **代码:(类名已重命名)** 两个版本中的CheeseDTO YAML: 使用springdoc-openapi-ui 1.3.9,我的yaml是这样生成的: 昂首阔步3注释: OpenAPi生成器maven插件 有没有办法用springdoc-openapi-ui>1.4.0生成?我必须更改我的大摇大摆的注释或更改我的java生成器吗?

  • 本文向大家介绍Android返回键功能的实现方法,包括了Android返回键功能的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android返回键功能的实现方法。分享给大家供大家参考。具体如下: 在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下并没有关闭改应用 我们可以这样做,当用户点