首页 文章

如何在 Jersey 使用带有ResourceConfig的招摇?

提问于
浏览
1

我正在开发一个REST api,并试图将Swagger和Jersey一起使用 .
我按照这里给出的指南: - https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5
我使用 ResourceConfig 而不是 Application 类并相应地修改了指南中的步骤 . 我正在grezzly上部署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,请求失败错误 .
为什么这样,我该如何调试呢?

1 回答

  • 3

    看看这个项目:

    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
      }
    }
    

相关问题