1

我尝试使用一个简单的 OpenAPI V3 API 在 OpenLiberty 上实现合同优先范式。

我使用以下插件生成 OpenAPI 代码:

<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.2-SNAPSHOT</version>

对于我使用的一代<generatorName>jaxrs-spec</generatorName>

<configOptions>我使用<useSwaggerAnnotations>false</useSwaggerAnnotations>

除了模型类之外,还会生成以下接口:

@Path("/inventory")
public interface InventoryApi {

  @GET
  @Path("/systems/{hostname}")
  @Produces({ "text/plain", "application/json" })
  Response getPropertiesForHost(@PathParam("hostname") String hostname);

  @GET
  @Path("/systems")
  @Produces({ "application/json" })
  Response listContents();
}

我尝试像这样尽可能精简地使用我的实现:

@RequestScoped
@Path("/")
public class InventoryImpl implements InventoryApi {

   public Response getPropertiesForHost(String hostname) {
      ...
   }

   public Response listContents() {
      ...
   }    
}

我可以使用以下 curl 命令调用 curl -X GET "http://localhost:9080/properties-sample/systems" 这行得通!

但是我本来希望使用以下内容 curl -X GET "http://localhost:9080/properties-sample/inventory/systems" ,但这不起作用。我必须将 Impl 中的 @Path 更改为@Path("/inventory"),因此它可以使用curl -X GET "http://localhost:9080/properties-sample/inventory/systems"

这是按设计工作还是@Path界面上的注释无关?

其他人是否有另一种在 OpenLiberty 中使用合同第一范式的方法?

4

1 回答 1

2

您为此使用 OpenAPI 工具插件是正确的。Open Liberty 支持MicroProfile OpenAPI,它允许您公开您的合约优先的 OAS3 文档,但出于生成目的,Open Liberty 遵循 OSS OpenAPI 工具社区。

此链接应有助于指导您的接口与实现有关 JAX-RS 注释的类决策。特别是,在您的示例中,您将覆盖主要的 @Path 注释,因此行为不同。

于 2018-08-21T15:38:13.190 回答