我可以抑制 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' 你不再有默认实现。
我有一个 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' 你不再有默认实现。