2017-08-10 152 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

我已经做了必要的修改。请看一看。它仍然没有工作。 –