我實現了一個項目,該項目使用非常簡單的JAX-RS後端爲基於AngularJS的用戶界面提供數據。這些是分離的模塊並部署在Wildfly 9上。爲了讓REST端點有一個很好的文檔,我遇到了swagger.io,這看起來很合適。但是,由於我的項目結構略有不同,因此我無法在文檔和示例之後設置swagger。問題在JBoss/Wildfly上使用JAX-RS項目設置Swagger.io 9
現狀
我可以訪問http://localhost:8080/service/swagger.json返回
{
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": ""
},
"host": "localhost:8080",
"basePath": "/service",
"schemes": ["http"]
}
但是招搖的UI(swagger.json正確連接)不顯示我的任何REST端點。
我認爲這個問題可能與爲Wildfly設置的basePath或contextRoot有關,但這只是一個模糊的猜測。除此之外,我甚至不確定使用什麼樣的Swagger JAX-RS實現。我認爲自從我使用Wildfly(JBoss)以來,它應該是Resteasy,但是Swagger Jersey設置文檔看起來更合適。
我的REST端點看起來像像http://localhost:8080/service/users/register
相關資源
的pom.xml
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.4</version>
</dependency>
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>service</display-name>
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
io.swagger.jaxrs.listing,
jfs.service.services
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>io.swagger.jaxrs.config.DefaultJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/service</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
</web-app>
的jboss-web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/service/</context-root>
</jboss-web>
UserWebService爲例
package jfs.service.services;
import com.google.gson.Gson;
import io.swagger.annotations.*;
import jfs.data.dataobjects.UserDO;
import jfs.data.dataobjects.enums.UserType;
import jfs.service.sessions.Session;
import jfs.transferdata.transferobjects.*;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import java.util.List;
@Path("/users")
@Api(tags = {"users"}, value = "/users", description = "Operations about user")
public class UserWebService {
@Inject
UserService service;
@POST
@ApiOperation(value = "Register company",
notes = "A user account for company will be created.",
position = 1)
@Path("/register")
@Consumes("application/json")
@Produces("application/json")
public Boolean registerCompany(RegisterDTO register){
Boolean result = false;
result = this.service.registerUser(register.email, register.password, UserType.COMPANY);
return result;
}
}