Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
restapi-Swagger&x2B;Java+;错误的列表路径和附加API_Java_Rest_Jersey_Jetty_Swagger - Fatal编程技术网

restapi-Swagger&x2B;Java+;错误的列表路径和附加API

restapi-Swagger&x2B;Java+;错误的列表路径和附加API,java,rest,jersey,jetty,swagger,Java,Rest,Jersey,Jetty,Swagger,在我的项目中,我使用Maven、Jetty、Swagger、Java和Jersey来创建RESTAPI。 我还使用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

在我的项目中,我使用Maven、Jetty、Swagger、Java和Jersey来创建RESTAPI。 我还使用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>
我想删除路径开头的/api文档

2) 如何从api中删除“/api文档/资源”?我只使用“employee”类,不使用“resources”

3) 如果我键入
http://localhost:8080/rest/api-文档/员工
我有我的方法 以及为空的“/”主URL。我可以移除它吗


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

我用这种方式解决了这个问题:

  • 将Swagger生成的api-docs.json保存到硬盘
  • 根据需要编辑生成的JSON
  • 将此文件复制到
    ~/src/main/webapp/swagger ui/api docs.json
  • Put
    http://localhost:8080/swagger-ui/api docs.json
    到您的
    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
    settings

    <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>
    
    
    $(函数(){
    window.swaggerUi=新的swaggerUi({
    发现者:“http://localhost:8080/swagger-ui/api docs.json“,
    apiKey:“特殊密钥”,
    dom_id:“招摇过市ui容器”,
    supportHeaderParams:false,
    supportedSubmitMethods:['get','post','put'],
    onComplete:函数(swaggerApi、swaggerUi){
    if(控制台){
    log(“加载的大摇大摆的UI”)
    console.log(swaggerApi);
    console.log(swaggerUi);
    }
    $('pre code')。每个(函数(i,e){hljs.highlightBlock(e)});
    },
    onFailure:功能(数据){
    if(控制台){
    console.log(“无法加载SwaggerUI”);
    控制台日志(数据);
    }
    },
    文档扩展:“无”
    });
    window.swaggerUi.load();
    });
    
    我会尽力回答你的三个问题,尽管我不是一个大摇大摆的专家。我还建议和IRC上那些大摇大摆的开发者谈谈——他们反应很快。我认为让Swagger“自动”工作是值得的,这样你就不必手动更新它了——这对我来说似乎不太理想

    1) 你不想在你的列表路径中去掉api文档——你想为你的列表取一个唯一的名字。它不必是api文档(例如,我使用资源),但您需要某种前缀来区分实际的REST资源和它们的描述。所以我认为这根本不是问题

    2) 您是否有一个扩展com.wordnik.swagger.jaxrs.javapilisting的类,可能称为ApiResourceListing。这就是你决定大摇大摆文档入口点的地方。也许你有一个像这样的额外的类,指向/资源?(它也可能是import com.wordnik.swagger.jaxrs.listing.ApiListing的扩展,如果在REST地址中未使用格式后缀,则使用该扩展

    3) 我不知道这个。就像我一开始说的,也许可以问问IRC上的那些大摇大摆的家伙或者他们的朋友


    4) 这个答案与Swagger 1.2有关。如果您最近刚刚遇到此问题,您可能希望查看已更新为1.3版的。

    接受一些答案如何?这是正确的答案。我也遇到了同样的问题,将基类从JavaApiListing更改为ApiListing解决了这个问题!
    <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>