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



我已经用openAPI生成器maven插件生成了rest api,我已经覆盖了MyApiDelegate接口的默认方法,但是/endpoint上的POST请求提供了501 NOT实现,就好像我没有在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();
}
}

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

直接实现MyApi接口,从而实现doSmth方法这是一种方法。你的具体类不需要所有与web相关的注释,只需要参数和返回值,就像一个普通的方法。

我不明白如何可以初始化接口MyApiDelegate,但由于getDelegate返回它的实现,因此调用doSmth的默认实现,返回HttpStatus.NOT_IMPLEMENTED

另一件需要注意的事情是确保部署知道使用实现类。如果你正在使用spring web,那么仅仅标记你的具体类@RestController就足够了。

相关内容

  • 没有找到相关文章

最新更新