2017-08-10 83 views
0

我有一個現有的使用REST API的maven項目。我正在嘗試將Swagger與該項目整合在一起。當我運行該項目時,我得到空的Swagger UI頁面。沒有加載API。我哪裏錯了?swagger ui與未顯示API的maven項目集成

的pom.xml

<!-- Swagger --> 
    <dependency> 
     <groupId>io.swagger</groupId> 
     <artifactId>swagger-jersey2-jaxrs</artifactId> 
     <version>1.5.16</version> 
    </dependency> 

我使用一個自定義的應用程序類(不web.xml)中

public class MyRestApplication extends ResourceConfig { 
public MyRestApplication() { 
    System.out.println("Entering Custom Application"); 
    property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);  
    property(ServerProperties. 
    BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true); 
    register(RolesAllowedDynamicFeature.class);   
    register(StorageResource.class); 
    register(io.swagger.jaxrs.listing.ApiListingResource.class); 
    register(io.swagger.jaxrs.listing.SwaggerSerializers.class);   
} 
}  

在我StorageResource文件:

@Api(value = "/Person") 
@Path("") 
public class StorageResource { 
static Logger logger = 
Logger.getLogger(StorageResource.class.getName()); 
@PUT 
@Path("/person-manager-resource/addPerson") 
@Produces("application/json") 
@Consumes("application/json") 
@ApiOperation(
     value = "method api", 
     notes = "method api notes" 
) 
public Object addPerson(String reqBody) { 
    AddPerson add = new AddPerson(); 
    return add.addPerson(reqBody); 
} 
} 

在索引中。 Swagger UI的HTML(從dist文件夾複製到webapp文件夾)

window.onload = function() { 
// Build a system 
const ui = SwaggerUIBundle({ 
url: "http://localhost:8080/demographics/dgs/swagger.json", 
dom_id: '#swagger-ui', 
presets: [ 
    SwaggerUIBundle.presets.apis, 
    SwaggerUIStandalonePreset 
], 
plugins: [ 
    SwaggerUIBundle.plugins.DownloadUrl 
], 
layout: "StandaloneLayout" 
}) 
window.ui = ui 
} 

我的web.xml文件:

<servlet> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>in.healthelife.DGS</param-value> 
    </init-param> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>in.healthelife.DGS.data.MyRestApplication</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/dgs/*</url-pattern> 
</servlet-mapping> 
+0

我看到'beanConfig.setResourcePackage( 「io.swagger.resources」)獲得;'只是爲了檢查,是'StorageResource'某處這個包'io.swagger.resources'? –

+0

對不起,我很新招搖。 StorageResource包裝在「in.healthelife.DGS.resources」中。 –

+0

這是否解決它或你仍然有問題? –

回答

0

UPDATE2
我不明白爲什麼你已經使用2 org.glassfish.jersey.servlet.ServletContainer它不會工作

確保您都在提您的自定義應用程序通過在web.xml中提到它來加載它通過運動衫容器

像sh下面自己


swagger-jersey2-jaxrs 

的依賴將是足夠的其餘部分將被拉到及物動詞。我不知道你正在使用的球衣的版本,但你必須以定製應用程序不Application類本身

您的擴展資源配置註冊這些2個功能擴展ResourceConfig

io.swagger.jaxrs.listing.ApiListingResource, 
    io.swagger.jaxrs.listing.SwaggerSerializers 

和自定義應用程序類在你的web.xml中被提及,像這樣

<servlet> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer 
    </servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.foo.app.CustomApplication 
    </param-value> 
    </init-param> 
    </servlet> 

更新

url: "http://localhost:8080/OpenEMPIStorage/rest/api-docs", 

其最好的,這是swagger.json的相對路徑所以它應該是這樣的

url: "swagger.json" 

,並確保你在路徑http://localhost:8080/OpenEMPIStorage/rest/api-docs湊了JSON在這個swagger.json文件被複制

和你的代碼資源配置裏面應該像

public MyRestApplication() 
{ 

    System.out.println("Entering Custom Application"); 

    property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true); 
    // @ValidateOnExecution annotations on subclasses won't cause errors. 
    property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true); 
    register(RolesAllowedDynamicFeature.class); 
    register(AuthenticationFilter.class); 
    register(AuthenticationResponseFilter.class); 
} 

不使用@ApplicationPath

你的Swagger。JSON應當根據休耕路徑

http://<ip address:portname or domain name >/<yourapp-path>/dgs/swagger.json 
+0

如果我沒有擴展Application類,那麼我會在哪裏添加資源? getClasses方法來自應用程序本身。 –

+0

ResourceConfig是應用程序的子類請參考文檔 –

+0

我已經做了必要的修改。請看一看。它仍然沒有工作。 –