我在加载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 )。
我很遗憾不像泽西那样对待泽西,所以欢迎任何帮助。
由于
答案 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