Jersey JAX-RS,Swagger - 生成swagger.json但没有UI

时间:2015-05-25 09:39:40

标签: java rest jersey swagger swagger-ui

我在加载Swagger UI /启用UI端点时遇到问题。 Maven项目,泽西版 - 2.12,Swagger版 - 1.5.1-M2

我是一个程序化配置的球衣网络应用程序。 在我的(Resource)扩展中,我为Swagger设置了以下内容:

    beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.0");
    beanConfig.setHost("http:localhost:8080");
    beanConfig.setBasePath("/app/v1");
    beanConfig.setResourcePackage("com.app.features");
    beanConfig.setScan(true);
    

    register(beanConfig);

    register(new ApiListingResourceJSON());
    register(new SwaggerSerializers());

我还有一个bootscrap类,我通过web.xml加载:

public class Bootstrap extends HttpServlet {

  @Override
  public void init(ServletConfig config) throws ServletException {
    Info info = new Info()
            .title("Swagger Sample App")
            .description("Desc")
            .termsOfService("http://helloreverb.com/terms/")
            .contact(new Contact()
                    .email("apiteam@swagger.io"))
            .license(new License()
                    .name("Apache 2.0")
                    .url("http://www.apache.org/licenses/LICENSE-2.0.html"));

    ServletContext context = config.getServletContext();
    Swagger swagger = new Swagger().info(info);
    context.setAttribute("swagger", swagger);
  }
}

表示web.xml:

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>Bootstrap</servlet-name>
    <servlet-class>com.app.Bootstrap</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>

我已将Swagger UI dist的内容复制到我的网络应用文件夹中。

当我点击http://localhost:8080/app/v1/swagger.json上的api json端点时,我会得到json代码,例如:

{"swagger":"2.0","info":{"version":"1.0.0"},"host":"http:localhost:8080","basePath":"/app/v1"}

但我似乎没有在我期望的路径上看到Swagger UI(http:localhost:8080 / app / v1或http:localhost:8080 / app / v1 / app / v1 / index.html )。

我很遗憾不像泽西那样对待泽西,所以欢迎任何帮助。

由于

4 个答案:

答案 0 :(得分:0)

您需要下载swagger-ui网络项目,并将其放在您的网络目录中,并在index.html中配置您的API地址,

index.html

  <script type="text/javascript">
    $(function () {
      var url = window.location.search.match(/url=([^&]+)/);
      if (url && url.length > 1) {
        url = decodeURIComponent(url[1]);
      } else {
        url = "http://petstore.swagger.io/v2/swagger.json"; //your api address
      }
      window.swaggerUi = new SwaggerUi({
        url: url,

现在您可以访问swagger-ui访问http://ip:port/path/swagger-ui/index.html

答案 1 :(得分:0)

我们也在google小组中介绍它,但这很可能是因为您的资源不是直接位于com.app.features包下,而是来自com.app.features.foo等子包。如果它们跨越多个包,您可以将其设置为com.app.features.foo,com.app.features.bar

我相信深度扫描在1.5.2-M2中已经改变,所以你也可以试试。

答案 2 :(得分:0)

有一个拼写错误:

beanConfig.setHost("http:localhost:8080");

应该是:

beanConfig.setHost("http://localhost:8080");

如果您使用Maven,可以尝试包含swagger-ui依赖项:

<dependency>
  <groupId>org.webjars</groupId>
  <artifactId>swagger-ui</artifactId>
  <version>2.2.10-1</version>
</dependency>

或更新的版本。

并尝试在浏览器中打开此网址:

http://localhost:8080/app/v1/api-docs?url=/app/v1/swagger.json

答案 3 :(得分:0)

请查看以下工作示例

包com.vk.test.swagger;

import static springfox.documentation.builders.PathSelectors.regex;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2

/**
 * 
 * @author vaquar khan
 *
 */
public class SwaggerConfiguration {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.basePackage("com.vk.test.controller")).paths(regex("/api/apiPath.*"))
                .build();

    }

}

的Maven

   <!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
            <scope>compile</scope>
        </dependency>
        <!-- Swagger UI -->

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
            <scope>compile</scope>
        </dependency>

调用招摇

http://<servername>:<Port>/swagger-ui.html