Я попытался использовать простой API OpenAPI V3 для реализации на 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"
Но это не работает. Мне нужно изменить @Path в Impl на @Path("/inventory")
, поэтому он работает с использованием curl -X GET "http://localhost:9080/properties-sample/inventory/systems"
Это работает так, как задумано, или @Path
аннотации в интерфейсе не имеют значения?
Есть ли у кого-нибудь другой способ использования первой парадигмы контракта с OpenLiberty?