[英]REST API - Swagger + Java + Jersey wrong listing path and additional apis
在我的項目中,我使用Maven,Jetty,Swagger,Java和Jersey來創建REST API。 我還使用Swagger為我的API創建漂亮的文檔。
幾乎一切都很好,而不是三個問題。 在第一個 - 這是我的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Restful Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.pjdb.rest;com.wordnik.swagger.jaxrs;</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Bootstrap</servlet-name>
<servlet-class>com.pjdb.rest.Bootstrap</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>ApiOriginFilter</filter-name>
<filter-class>com.pjdb.rest.utils.ApiOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ApiOriginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
1)如何從listingPath的beginnig中刪除api-docs?
{
"apiVersion": "1.0",
"swaggerVersion": "1.1",
"basePath": "http://localhost:8080/rest",
"apis": [
{
"path": "/api-docs/resources",
"description": ""
},
{
"path": "/api-docs/employee",
"description": ""
}
]
}
我想在路徑的開頭刪除/ api-docs ..
2)如何從api中刪除“/ api-docs / resources”? 我只使用'員工'課程,而不是'資源'。
3)如果我輸入http://localhost:8080/rest/api-docs/employee
我有我的方法和'/'主URL是空的。 我可以刪除它嗎?
我嘗試了很多配置。 我錯過了什么嗎?
我會嘗試回答你所有的三個問題,盡管我不是一個Swagger專家。 我也建議在IRC上與Swagger開發人員交談 - 他們很快就會做出回應。 我認為讓Swagger“自動”工作是值得的,這樣你就不必手動更新它 - 這對我來說似乎不太理想。
1)您不希望在列表路徑中刪除api-docs -您希望列表具有某種獨特的名稱。 它不一定是api-docs - 例如,我使用資源 - 但是你需要某種前綴來區分你在Swagger上的實際REST資源和它們的描述。 所以我認為這根本不是問題。
2)你有一個擴展com.wordnik.swagger.jaxrs.JavaApiListing的類,可能叫做ApiResourceListing 。 這就是您確定Swagger文檔的入口點的位置。 也許你有一個像這個指向/資源的額外課程? (它也可能是導入com.wordnik.swagger.jaxrs.listing.ApiListing的擴展,如果您沒有在REST地址中使用格式后綴,則可以使用它。
3)我不知道這個。 就像我在開始時所說的那樣,也許會問他們的IRC或他們的谷歌小組的Swagger人。
4)這個答案與Swagger 1.2相關。 如果您剛剛遇到這個問題,您可能需要查看Swagger Jax-RS教程 ,該教程已針對1.3版進行了更新。
我用這種方式解決了這個問題:
~/src/main/webapp/swagger-ui/api-docs.json
http://localhost:8080/swagger-ui/api-docs.json
you /swagger-ui
目錄的index.html
的discoveryUrl路徑 這個方法需要你,你必須自己修改主列表,如果有什么變化,但它是安全和有效的解決方案。
我的api-docs.json看起來像這樣:
{
"apiVersion": "1.0",
"swaggerVersion": "1.1",
"basePath": "http://localhost:8080/rest",
"apis": [
{
"path": "/api-docs.json/employee",
"description": ""
}
]
}
和swagger-ui/index.html
設置
<script type="text/javascript">
$(function () {
window.swaggerUi = new SwaggerUi({
discoveryUrl:"http://localhost:8080/swagger-ui/api-docs.json",
apiKey:"special-key",
dom_id:"swagger-ui-container",
supportHeaderParams: false,
supportedSubmitMethods: ['get', 'post', 'put'],
onComplete: function(swaggerApi, swaggerUi){
if(console) {
console.log("Loaded SwaggerUI")
console.log(swaggerApi);
console.log(swaggerUi);
}
$('pre code').each(function(i, e) {hljs.highlightBlock(e)});
},
onFailure: function(data) {
if(console) {
console.log("Unable to Load SwaggerUI");
console.log(data);
}
},
docExpansion: "none"
});
window.swaggerUi.load();
});
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.