我可以抑制 OpenAPI 生成到接口中的默认 Optional<NativeWebRequest> getRequest() 吗?

Can I suppress the default Optional<NativeWebRequest> getRequest() that OpenAPI generates into interfaces?

我有一个 OpenAPI 3.0 文件,它指定了两个具有操作的 REST 资源,比方说:

openapi: 3.0.0
[...]
paths:
  /a:
    post:
      [...]
  /b
    post:
      [...]

然后我使用 openapi-generator-maven-plugin 比如:

<plugin>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-maven-plugin</artifactId>
  <version>4.1.2</version>
  <configuration>
    [...]
    <configOptions>
      <interfaceOnly>true</interfaceOnly>
      [...]
    </configOptions>
 </configuration>
</plugin>

生成Java接口,给我:

public interface AApi {

  default Optional<NativeWebRequest> getRequest() {
    return Optional.empty();
  }

  default ResponseEntity<String> postA([...]) { [...] }

}

public interface BApi {

  default Optional<NativeWebRequest> getRequest() {
    return Optional.empty();
  }

  default ResponseEntity<String> postB([...]) { [...] }

}    

最后,我想写一个实现两个接口的class:

class TheController implements AApi, BApi { [...] }

但是,getRequest() 方法妨碍了,因为 Java 无法继承两个具有相同名称的默认实现。

有没有办法抑制生成这个方法? (或者其他一些我没有想到的实现这两个接口的方法?)

您可以在实施控制器 class 中覆盖 getRequest() 方法。

如需进一步阅读,请参阅 https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.8.4

我知道这个问题已经得到解答,但我也遇到了这个问题并找到了不同的解决方案。您还可以在 configOptions 部分添加:

<configOptions>
    <skipDefaultInterface>true</skipDefaultInterface>
</configOptions>

它确实有 'side effect' 你不再有默认实现。

另见 documentation