尝试访问swagger.json时出现404错误

时间:2018-02-09 05:29:28

标签: java json servlets jax-rs swagger

我尝试按照文档将swagger集成到现有的API中。这是教程:https://github.com/swagger-api/swagger-core/wiki/Swagger-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>

我的上下文根是&#34; /&#34;。所以现在当我去http://localhost:7001//itemapi/swagger.json时,我收到404错误。

有关信息,这是在WebLogic上部署的JAX-RS Jersey 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中添加一个片段。该课程保存在名为&#39; test&#39;的单独包中。

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

提前感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

对于任何有兴趣的人,我明白了。

我没有在web.xml中的包扫描servlet中包含一个重要的包,因此api甚至没有正常运行。

我恢复了所有的更改并决定运行api。通过日志,我看到了正在扫描的软件包,因为servletcontainer servlet是空白的。然后我像以前一样再次编辑它,但这一次记住上次扫描的包。

同一链接现在有效。并且不需要应用程序子类。