尝试访问Swagger.json时会遇到404错误



我试图遵循文档,将Swagger集成到现有的API中。这是教程:https://github.com/swagger-api/swagger-core/wiki/wiki/swagger-core-core-jersey-1.x-project-setup-1.5

我在pom.xml中添加了maven依赖性 -

    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-jersey-jaxrs</artifactId>
        <version>1.5.0</version>
        <exclusions>
            <exclusion>
                <artifactId>jersey-server</artifactId>
                <groupId>com.sun.jersey</groupId>
            </exclusion>
            <exclusion>
               <artifactId>jersey-multipart</artifactId>
               <groupId>com.sun.jersey.contribs</groupId>
            </exclusion>
        </exclusions>
    </dependency>

不太确定是否应该添加排除。然后,对于包装扫描,我添加了以下内容。泽西郡的ServletContainer已经存在。我刚刚添加了初始化参数。

<servlet>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>
    io.swagger.jaxrs.json;
    io.swagger.jaxrs.listing;
    jp.co.mycompany.rest.api.resource
  </param-value>
</init-param> 
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>JAX-RS Servlet</servlet-name>
  <url-pattern>/itemapi/*</url-pattern>
</servlet-mapping>

然后,我将以下servlet添加到web.xml,这应该是最后一步。

<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>io.swagger.jaxrs.config.DefaultJaxrsConfig</servlet-class>
<init-param>
  <param-name>api.version</param-name>
  <param-value>0.0.1-SNAPSHOT</param-value>
</init-param>
<init-param>
  <param-name>swagger.api.basepath</param-name>
  <param-value>http://localhost:7001//itemapi/</param-value>
</init-param>
<load-on-startup>2</load-on-startup>

我的上下文根是"/"。因此,现在当我访问http://localhost:7001//itemapi/swagger.json我会有404错误。

有关信息,这是在WebLogic上部署的JAX-RS球衣1.9 REST API。我进行了一些研究,有人说使用自定义应用程序而不是软件包扫描servlet。我在下面创建了类(也许这里有些错误(:

package test;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/itemapi")
public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
    Set<Class<?>> classes = new HashSet<Class<?>>();
    classes.add(jp.co.mycompany.api.resource.EventItemResource.class);
    classes.add(jp.co.mycompany.api.resource.EventItemResourceBase.class);
    classes.add(jp.co.mycompany.api.resource.EventItemResponseJsonMessageBodyWriter.class);     
    classes.add(jp.co.mycompany.api.resource.JsonMessageBodyWriter.class);
    classes.add(jp.co.mycompany.api.resource.JsonMessageBodyWriterBase.class);
    classes.add(jp.co.mycompany.api.resource.NormalItemResourceBase.class);
    classes.add(jp.co.mycompany.api.resource.NormalItemResourceCommon.class);
    classes.add(jp.co.mycompany.api.resource.NormalItemResultJsonMessageBodyWriter.class);
    classes.add(jp.co.mycompany.api.resource.ValidatingEventItemXmlRequest.class);
    classes.add(jp.co.mycompany.api.resource.ValidatingNormalItemXmlRequest.class);
    classes.add(jp.co.mycompany.api.resource.ValidatingXmlRequest.class);
    classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
    classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
    return classes;
    }
}

问题是我不知道如何确保这堂课正在运行。我必须在web.xml中添加摘要吗?该类保存在一个称为"测试"的单独软件包中。

首先,为什么我会遇到404错误?我错过了什么?其次,如果这是一个问题,我该如何保存并运行此自定义应用程序类??

事先感谢您的所有帮助!

对于任何有兴趣的人,我都知道了。

我没有在Web.xml中的软件包扫描servlet中包含一个重要的软件包,因此API甚至无法正常运行。

我恢复了所有更改,决定运行API。通过日志,我看到了哪些软件包正在扫描,因为ServletContainer Servlet是空白的。然后,我像以前一样再次对其进行了编辑,但是这次牢记上次扫描的包装。

现在相同的链接起作用。而且不需要应用程序子类。

最新更新