如何在球衣中使用 swagger 和 ResourceConfig?

Posted

技术标签:

【中文标题】如何在球衣中使用 swagger 和 ResourceConfig?【英文标题】:How to use swagger with ResourceConfig in jersey ? 【发布时间】:2017-03-21 16:17:56 【问题描述】:

我正在开发一个 REST api 并尝试将 Swagger 与 Jersey 一起使用。 我正在按照此处给出的指南进行操作:- https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5 我使用 ResourceConfig 而不是 Application 类,并相应地修改了指南中的步骤。我在 grizzly 上部署 API。

这里是主文件:-

package com.example;

import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;

import java.io.IOException;
import java.net.URI;

import io.swagger.jaxrs.config.*;

/**
 * Main class.
 *
 */
public class Main 
    // Base URI the Grizzly HTTP server will listen on
    public static final String BASE_URI = "http://localhost:8080/";

    /**
     * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
     * @return Grizzly HTTP server.
     */
    public static HttpServer startServer() 
        // create a resource config that scans for JAX-RS resources and providers
        // in com.example package
        final ResourceConfig rc = new ResourceConfig().packages("com.example");
        rc.register(io.swagger.jaxrs.listing.ApiListingResource.class);
        rc.register(io.swagger.jaxrs.listing.SwaggerSerializers.class);
        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion("1.0.2");
        beanConfig.setSchemes(new String[]"http");
        beanConfig.setHost("localhost:8080");
        beanConfig.setBasePath("resources/api");
        beanConfig.setResourcePackage("io.swagger.resources");
        beanConfig.setScan(true);

        // create and start a new instance of grizzly http server
        // exposing the Jersey application at BASE_URI
        return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
    

    /**
     * Main method.
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException 
        final HttpServer server = startServer();
        System.out.println(String.format("Jersey app started with WADL available at "
                + "%sapplication.wadl\nHit enter to stop it...", BASE_URI));
        System.in.read();
        server.stop();
    

现在,当我尝试在 url http://localhost:8080/swagger.json 访问 swagger.json 时,我收到 500, Request Failed 错误。 为什么会这样,我该如何调试它?

【问题讨论】:

查看this post。可能相关 @peeskillet 谢谢!这是同样的问题。 【参考方案1】:

看看这个项目:

https://github.com/sofien-hamdi/rest-mongo

我已经使用 BeanConfig 对其进行了配置。

package com.kt.examples.rs.configuration;

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.wadl.internal.WadlResource;
import org.springframework.context.annotation.Configuration;

import com.kt.examples.rs.controller.UserController;

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

@Configuration
public class JerseyConfig extends ResourceConfig 

  public JerseyConfig() 
    this.registerEndpoints();
    this.configureSwagger();
  

  private void registerEndpoints() 
    this.register(UserController.class);
    this.register(WadlResource.class);
    // http://localhost:9090/v1/application.wadl
  

  private void configureSwagger() 
    this.register(ApiListingResource.class);
    this.register(SwaggerSerializers.class);
    BeanConfig config = new BeanConfig();
    config.setConfigId("spring-boot-jaxrs-swagger");
    config.setTitle("Spring boot jaxrs swagger integration");
    config.setVersion("v1");
    config.setBasePath("/");
    config.setResourcePackage("com.kt.examples.rs");
    config.setPrettyPrint(true);
    config.setScan(true);
    // http://localhost:9090/v1/swagger.json
  

【讨论】:

请在此处包含答案的基本部分。 SO 用于长期使用,链接可能会更改。

以上是关于如何在球衣中使用 swagger 和 ResourceConfig?的主要内容,如果未能解决你的问题,请参考以下文章

如何从球衣过滤器中排除一些网址?

如何使用球衣发送经过 NTLM 身份验证的发布请求?

如何从 angularjs 和 CORS 支持将文件上传到球衣

swagger编辑器错误:CORS标题'Access-Control-Allow-Origin'丢失

从 JSON 输出球衣 moxy 中删除“类型”

如何验证 PoolingHttpClientConnectionManager 是不是应用于球衣客户端