我们正在大张旗鼓地记录我们的JAX-RS API。通过使用swagger-jaxrs2包,我们可以很好地创建api文档。

我们唯一要更改的是:默认的“ openapi” -Url。
通过注册Swaggers OpenApiResource类,我们的应用程序每次生成默认的"[host]/openapi"端点。

我们能够创建自己的端点,该端点为openapi-spec服务,但是我们不能禁用此默认端点。

任何提示都是值得欢迎的!提前给你加油。

最佳答案

我们通过以下解决方法解决了:修改javax.ws.rs.core.Application以仅加载我们自己提供的端点,而忽略任何其他3rdParty端点,例如swagger-jaxrs2 openapiopenapi.{type:json|yaml}

@ApplicationPath("")
public class OurApplication extends javax.ws.rs.core.Application {

    @Override
    public Set<Class<?>> getClasses() {
        // Start detecting only classes in your package! provided 3rdParty packages
        // (like io.swagger.v3.jaxrs2.integration.resources) won't be provided
        Reflections ourClasses = new Reflections("our.package.naming");

        // Scan your classed for @javax.ws.rs.Path Annotaion. We need just collect
        // API-Endpoints
        Set<Class<?>> ourEndpoints = ourClasses.getTypesAnnotatedWith(Path.class);

        // fyi - log the registered classes / endpoints
        System.out.println("Providing "+ ourEndpoints);

        // return endpoints to provide it in your application
        return ourEndpoints;
    }

}


提示:由于@ApplicationPath注释,因此无需修改web.xml。

我们使用的反射由maven提供:

  <dependency>
      <groupId>org.reflections</groupId>
      <artifactId>reflections</artifactId>
      <version>0.9.12</version>
    </dependency>


观看以获得更多关于反射包的信息。

我们没有找到更好的解决方案,但这对我们有用。好好享受。

10-08 13:13