【问题标题】:Can't get json from Swagger (swagger-jaxrs)无法从 Swagger (swagger-jaxrs) 获取 json
【发布时间】:2016-04-21 02:28:04
【问题描述】:

实际上,我正在尝试为我的 REST 服务生成 swagger.json。 我使用 jersy 成功了,但现在我们在服务中使用不使用 jersy,我们只使用 Jax-rs,所以现在我无法生成它并得到 404 错误代码。

这是我的 pom 依赖项

<dependencies>

    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-jaxrs</artifactId>
        <version>1.5.6</version>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
    </dependency>
    <dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections</artifactId>
        <version>0.9.10</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>

</dependencies>

这是我的应用配置应用程序

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import com.skios.endpoint.EmployeeEndpoint;
import com.skios.endpoint.ShopsEndpoint;

import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.jaxrs.listing.SwaggerSerializers;

@ApplicationPath("api")
public class AppConfiguration extends Application {

public AppConfiguration() {
    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.2");
    beanConfig.setSchemes(new String[] { "http" });
    beanConfig.setHost("localhost:7070");
    beanConfig.setBasePath("app");
    beanConfig.setResourcePackage("com.skios.endpoint");
    beanConfig.setScan(true);
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Set<Class<?>> getClasses() {

    Set<Class<?>> resources = new HashSet();
    resources.add(ShopsEndpoint.class);
    resources.add(EmployeeEndpoint.class);
    // ...
    resources.add(ApiListingResource.class);
    resources.add(SwaggerSerializers.class);
    return resources;
}
}

这些是我的终点

@Api(value = "/employees", description = "Endpoint for employee listing")
@Path("/employees")
public class EmployeeEndpoint {}

@Path("/shops")
@Api(value="/shops", description="Shops")
public class ShopsEndpoint {}

现在当我尝试输入 swagger.json 文件的路径时

http://localhost:7070/MavenSwaggerTest/api/swagger.json

i got 404 error code.

那么问题是什么?谁能帮我? 谢谢

【问题讨论】:

  • 您是否在日志中看到任何其他错误(在启动时)?您能否提供一个用于访问 API 的示例 URL(我假设您可以成功地做到这一点)?
  • @Ron: 非常感谢您的回复,但实际上我在控制台中没有任何错误,我正在通过 Tomcat v8 进行测试,这也是我的项目>>drive.google.com/open?id=0B1u4YdligQ8YYllFUGVCbm5seHM 请检查它
  • 这并不是说 swagger.json 不可访问,而是您的 API 中的任何内容都不可访问 - 甚至您的商店资源也不可访问。 JAX-RS 只是一个规范和一组接口。你可以写一些通用的东西,但你需要把它挂在一个实现上。 swagger-jaxrs 将引入旧版本的球衣,但这还不够。您的第一步是修复应用程序以使其正常工作。
  • @Ron:感谢您的关注,实际上我删除了所有依赖项,但只保留了 >> io.swagger swagger-jaxrs 版本 1.5.6 并将 Emplyee 和 shop 类添加到资源中,然后通过 wildfly 运行项目版本 9x 而不是 Tomcat 服务器,我让它运行没有问题,我在运行时也得到了 swagger.json 文件,再次非常感谢你
  • @ Supun Wijerathne 实际上你的回答对我没有帮助,因为问题出在项目本身而不是这个配置,但总的来说我只使用 io.swagger 依赖并忽略其他依赖。顺便说一句,感谢您的回答,但我无法将其标记为我的问题的正确答案

标签: jax-rs swagger swagger-ui swagger-2.0


【解决方案1】:

您没有正确配置您的ApplicationPathBasePath

像这样配置它。

@ApplicationPath("/api")

beanConfig.setBasePath("/api");

现在http://localhost:7070/MavenSwaggerTest/api/swagger.json 可以工作了,除非有任何其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多