java - REST API - Swagger + Java + Jersey 错误的列表路径和额外的 api

标签 java rest jersey jetty swagger

在我的项目中,我使用 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开头的api文档?

{
  "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,它是空的。我可以删除它吗?

我已经尝试了很多配置。我错过了什么吗?

最佳答案

我是这样解决的:

  1. 将Swagger生成的api-docs.json保存到硬盘
  2. 根据需要编辑生成的 JSON
  3. 将此文件复制到 ~/src/main/webapp/swagger-ui/api-docs.json
  4. http://localhost:8080/swagger-ui/api-docs.json 放到你 /swagger 的 index.html 中的 discoveryUrl 路径-ui 目录

这个方法需要你,你必须自己修改你的主列表 如果有任何变化,但它是安全且有效的解决方案。

我的 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>

关于java - REST API - Swagger + Java + Jersey 错误的列表路径和额外的 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14262660/

相关文章:

java - 如何以编程方式启动 JNLP 应用程序?

java - 方法根本不返回任何内容

c# - WCF 休息。是否可以将从客户端收到的请求记录到数据库中?

r - 在 R 中使用 GTmetrix REST API v2.0

java - 除了 @Produces 注释之外,Jersey (JAX-RS) 如何知道将 POJO 视为特定的 MIME 类型?

jersey - Dropwizard - 请求过滤器进行健康检查

java - (javafx)我目前正在制作一个需要人们创建帐户的应用程序,我如何确保文本字段不为空?

java - 输入流每字节读取如何工作?

java - 如何从 Java 客户端向 POST 请求发送查询参数,并使用 @QueryParam 接收

java - 如何修复 java.lang.OutOfMemoryError : Java heap space error?