[英]Cannot access swagger documentation using <url>/api-docs
我正在嘗試使用Jersey和swagger構建Hello World REST服務以生成文檔。 我能夠成功調用其余方法,但是當我嘗試通過調用以下表格來訪問swagger文檔時:
http://localhost:8080/com.swagger.first/rest/api-docs
我收到“ 404未找到”。 (我也嘗試將.json添加到末尾)
我按照本教程中的步驟構建了我的服務。
我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>com.swagger.first</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
com.wordnik.swagger.jaxrs.json,
com.swagger.first
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
com.wordnik.swagger.jersey.listing.ApiListingResourceJSON,
com.wordnik.swagger.jersey.listing.JerseyApiDeclarationProvider,
com.wordnik.swagger.jersey.listing.JerseyResourceListingProvider
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</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/com.swagger.first/rest</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
這是我的pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.swagger.first</groupId>
<artifactId>com.swagger.first</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jersey2-jaxrs_2.10</artifactId>
<version>1.3.12</version>
</dependency>
</dependencies>
最后,這是我的服務類別:
package com.swagger.first;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import io.swagger.annotations.*;
@Api( value="hello", description="HelloWrold service")
@Path("/hello")
public class HelloWorld {
@GET
@Produces(MediaType.TEXT_PLAIN)
@ApiOperation(value="Returns 'Hello World!!' string", notes="No comment")
@ApiResponse(code=200, message="Succeeded")
public String helloWorld(){
return "Hello World!!";
}
@GET
@Produces(MediaType.APPLICATION_XML)
@ApiOperation(value="Returns 'Hello World!!' string as XML", notes="No comment")
@ApiResponses(value = {
@ApiResponse(code=200, message="Succeeded"),
@ApiResponse(code=400, message="Testing Swagger")
})
public String helloWorldXml(){
return "<hello> Hello World!! </hello>";
}
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/echo")
@ApiOperation(value="Returns the query param", notes="No comment")
public String echoStringQueryParam(@ApiParam(name="s", value="any string", required=true) @QueryParam("s") String s){
return s;
}
}
盡管此解決方案遲到了,但我希望它能對目前正在尋找該問題答案的人們派上用場。
您引用的Jersey / Swagger教程沒有提到Swagger的用戶界面未包含在maven安裝中。 它的核心工作是生成一個swagger.json文件,該文件可以由Swagger UI使用
如果您正在尋找如下所示的API文檔: http : //petstore.swagger.io/ ,
然后,您需要安裝以下npm軟件包,並將其內容復制到Java項目中的webapp文件夾中。 https://www.npmjs.com/package/swagger-ui-dist
您的基本項目結構應如下所示:
您還需要編輯index.html文件,以便在那里定義的url變量鏈接到本地的swagger.json文件,而不是默認情況下在此處設置的petstore示例的鏈接。
就我而言,它看起來像這樣:
<script>
window.onload = function() {
// Build a system
const ui = SwaggerUIBundle({
url: "http://localhost:8080/simple-service-webapp/api/swagger.json",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
window.ui = ui
}
部署之后,在瀏覽器中訪問應用程序的根URL時,您應該能夠看到文檔。
感謝Alexender分享了這一重要信息,這是啟動https://hub.packtpub.com/restful-java-web-services-swagger/時可以遵循的另一個鏈接,當您能夠獲得諸如swagger之類的swagger規范后如本教程鏈接中所述的.json格式,那么我猜應該遵循alexender答復中提到的步驟以獲取最終的精美的swagger文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.