2015-08-20 15 views
10

Tôi đang sử dụng swagger-ui để cung cấp tài liệu tốt đẹp cho các API REST cho các khách hàng của chúng tôi. Nội bộ chúng tôi có hai môi trường khác nhau jenkin xây dựng dự án. Ví dụ: swagger.json có thể truy cập trên cả hai môi trường như: http://www.myhost.com/xyz/rest/swagger.json https://www.myhost2.com/rest/swagger.jsonXử lý nhiều bản sao trong swagger

Tài liệu có sẵn như: http://www.myhost.com/xyz/dist/index.html https://www.myhost2.com/dist/index.html

vênh vang api basepath trong web.xml là:

<init-param>  
    <param-name>swagger.api.basepath</param-name> 
    <param-value>/rest</param-value> 
</init-param> 

CẤP: Tôi cố gắng để sử dụng tính năng "Dùng thử" trên trang tài liệu. Url yêu cầu tương ứng cho cả hai máy chủ như sau: http://www.myhost.com/rest/getAUser https://www.myhost2.com/rest/getAUser

Nó hoạt động đối với host2 khi nó nhấn đúng url. Tuy nhiên nó cần phải đạt http://www.myhost.com/xyz/rest/getAUser cho host1 nhưng nó đang nhấn url http://www.myhost.com/rest/getAUser.

Có cách nào tôi có thể chỉ định nhiều basepath cho các url khác nhau không.

Htagger-ui html của tôi trông giống như thế này.

$(function() { 
var href = window.location.href; 
var url = href.substring(0, href.lastIndexOf("/dist")); 
console.log(url); 
// Pre load translate... 
if(window.SwaggerTranslator) { 
window.SwaggerTranslator.translate(); 
} 
window.swaggerUi = new SwaggerUi({ 
url: url + "/rest/swagger.json", 
dom_id: "swagger-ui-container", 
...... 
...... 
} 
+1

Hoàn toàn không liên quan đến câu hỏi, nhưng '/ getAUser' tất nhiên là không đúng thiết kế REST. GET là hoạt động và url của bạn nên bao gồm các danh từ. – Jasper

Trả lời

6

tôi đã có thể giải quyết vấn đề này bằng cách cấu hình vênh vang bằng BeanConfig thay vì sử dụng Servlet trong web.xml

BeanConfig lớp:

public class SwaggerBootstrap extends DefaultJaxrsConfig { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = myAutoGeneratedID; 

    @Override 
    public void init(ServletConfig config) throws ServletException { 

     super.init(config); 
     //contextPath will be null for host2 and /xyz for host1. 
     String contextPath = config.getServletContext().getContextPath(); 

     BeanConfig beanConfig = new BeanConfig(); 
     beanConfig.setVersion("1.0.0"); 
     beanConfig.setTitle("My API Documentation"); 
     beanConfig.setSchemes(new String[] { 
       "http", "https" 
     }); 
     beanConfig 
     .setResourcePackage("com.example.my.rest.api.package"); 

     beanConfig.setBasePath(contextPath + "/rest"); 
     beanConfig.setScan(true); 
    } 
} 

và trong web.xml:

<servlet> 
     <servlet-name>SwaggerBootstrap</servlet-name> 
     <servlet-class>my.package.to.SwaggerBootstrap</servlet-class> 
     <init-param> 
      <!-- This make sure that all resources are scanned whether or not they use Swagger Annotations. 
      https://github.com/swagger-api/swagger-samples/tree/master/java/java-jaxrs-no-annotations --> 
      <param-name>scan.all.resources</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 

Và tôi đã thay đổi tệp pom.xml của mình để bắt đầu sử dụng phiên bản ổn định mới nhất của swagger-jersey2-jaxrs:

<dependency> 
      <groupId>io.swagger</groupId> 
      <artifactId>swagger-jersey2-jaxrs</artifactId> 
      <version>1.5.3</version> 
     </dependency> 
Các vấn đề liên quan