招摇 + 球衣 + 灰熊

Swagger + Jersey + Grizzly

我一直在尝试使用 Swagger 生成 REST API 文档。

已遵循 link 但未能成功。低于错误

  12:54:39.859 [main] INFO  org.reflections.Reflections - Reflections took 63 ms to scan 1 urls, producing 73 keys and 122 values
  12:54:39.906 [main] DEBUG i.s.jaxrs.ext.SwaggerExtensions - adding extension io.swagger.jersey.SwaggerJersey2Jaxrs@18be6e8
  12:54:39.906 [main] DEBUG io.swagger.jaxrs.Reader - picking up response class from method public rest.beans.UserBean rest.frontend.UserResource.opAllocateUser(rest.beans.UserBean,javax.ws.rs.core.Request)
  12:54:39.921 [main] DEBUG i.s.c.ModelConverterContextImpl - resolveProperty class  rest.beans.UserBean
  12:54:39.921 [main] DEBUG io.swagger.jackson.ModelResolver - resolveProperty [simple type, class  rest.beans.UserBean]
  12:54:39.921 [main] DEBUG i.s.c.ModelConverterContextImpl - resolve [simple type, class  rest.beans.UserBean]
  12:54:39.921 [main] DEBUG i.s.c.ModelConverterContextImpl - trying extension io.swagger.jackson.ModelResolver@5ecce3
  12:54:39.921 [main] DEBUG io.swagger.jackson.ModelResolver - Can't check class [simple type, class  rest.beans.UserBean],        rest.beans.UserBean
  12:54:39.937 [main] DEBUG i.s.c.ModelConverterContextImpl - defineModel UserBean io.swagger.models.ModelImpl@c2b00fee
  12:54:39.937 [main] DEBUG i.s.c.ModelConverterContextImpl - resolveProperty [simple type, class java.lang.String]
  12:54:39.937 [main] DEBUG io.swagger.jackson.ModelResolver - Can't check class [simple type, class java.lang.String], java.lang.String
  12:54:39.952 [main] DEBUG io.swagger.jackson.ModelResolver - resolveProperty [simple type, class java.lang.String]
  12:54:39.952 [main] DEBUG i.s.c.ModelConverterContextImpl - resolveProperty [simple type, class java.lang.String]
  12:54:39.952 [main] DEBUG io.swagger.jackson.ModelResolver - Can't check class [simple type, class java.lang.String], java.lang.String
  12:54:39.952 [main] DEBUG io.swagger.jackson.ModelResolver - resolveProperty [simple type, class java.lang.String]
  12:54:39.952 [main] DEBUG io.swagger.converter.ModelConverters - ModelConverters readAll from class  rest.beans.UserBean
  12:54:39.952 [main] DEBUG i.s.c.ModelConverterContextImpl - resolve class  rest.beans.UserBean
  12:54:39.952 [main] DEBUG i.s.c.ModelConverterContextImpl - trying extension io.swagger.jackson.ModelResolver@5ecce3
  12:54:39.952 [main] DEBUG i.s.c.ModelConverterContextImpl - defineModel UserBean io.swagger.models.ModelImpl@c2b00fee
  12:54:39.952 [main] DEBUG i.s.c.ModelConverterContextImpl - resolveProperty [simple type, class java.lang.String]
  12:54:39.952 [main] DEBUG io.swagger.jackson.ModelResolver - Can't check class [simple type, class java.lang.String], java.lang.String
  12:54:39.952 [main] DEBUG io.swagger.jackson.ModelResolver - resolveProperty [simple type, class java.lang.String]
  12:54:39.952 [main] DEBUG i.s.c.ModelConverterContextImpl - resolveProperty [simple type, class java.lang.String]
  12:54:39.952 [main] DEBUG io.swagger.jackson.ModelResolver - Can't check class [simple type, class java.lang.String], java.lang.String
  12:54:39.952 [main] DEBUG io.swagger.jackson.ModelResolver - resolveProperty [simple type, class java.lang.String]
  12:54:39.952 [main] DEBUG io.swagger.jaxrs.Reader - getParameters for [simple type, class  rest.beans.UserBean]
  12:54:39.952 [main] DEBUG io.swagger.jaxrs.Reader - trying extension io.swagger.jersey.SwaggerJersey2Jaxrs@18be6e8

接下来搜索并发现 link 最接近我的问题。再次按照它但仍然出现上述错误。我看不到生成 swagger.json

版本信息

Jersey : 2.22.1
Jackson : 2.6.3
Swagger : 1.5.6
Grizzly : 2.3.23

我是否缺少使其正常工作所需的一些配置?或者我需要更多的图书馆吗?

谢谢

Statement : Generate Swagger UI for the listing of all the REST APIs through Grizzly and Jersey Application.



 1. Add following dependency in pom.xml –

<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.9</version>
</dependency>

 2. Bundle Swagger UI and docs folder through you main application class using the below code –

package com.main;

import java.io.IOException;
import java.net.URI;
import org.glassfish.grizzly.http.server.CLStaticHttpHandler;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.grizzly.http.server.ServerConfiguration;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import io.swagger.jaxrs.config.BeanConfig;

public class MainApp {

// Base URI the Grizzly HTTP server will listen on

public static final URI BASE_URI = URI.create(“http://0.0.0.0:8080&#8221;);

public static HttpServer getLookupServer() {
String resources = “com.main”;
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion(“1.0.1”);
beanConfig.setSchemes(new String[] { “http” });
beanConfig.setBasePath(“”);
beanConfig.setResourcePackage(resources);
beanConfig.setScan(true);
final ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages(resources);
resourceConfig.register(io.swagger.jaxrs.listing.ApiListingResource.class);
resourceConfig.register(io.swagger.jaxrs.listing.SwaggerSerializers.class);
resourceConfig.register(JacksonFeature.class);
resourceConfig.register(JacksonJsonProvider.class);
return GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig);
}

public static void main(String[] args) throws IOException {
final HttpServer server = getLookupServer();
server.start();
ClassLoader loader = MainApp.class.getClassLoader();
CLStaticHttpHandler docsHandler = new CLStaticHttpHandler(loader, “swagger-ui/”);
docsHandler.setFileCacheEnabled(false);
ServerConfiguration cfg = server.getServerConfiguration();
cfg.addHttpHandler(docsHandler, “/docs/”);
}
}

 3. Take the latest code of swagger-ui. Copy all the content of the dist folder and create a folder named  swagger-ui inside src/main/resources and paste all the copied contents. Now change the url in index.file which is inside the copied folder like below –

url: http://0.0.0.0:8080/swagger.json

 4. Lastly, annotate your controller with @Api and @ApiOperation.

Hope it works. Now to run your Grizzly Jersey Application, go to browser and type localhost:8080/docs/. You will see Swagger UI having all the details of your REST APIs.

Happy coding and sharing as well.  You can find the [git](https://guptakumartanuj.wordpress.com/2017/07/24/generate-swagger-ui-through-grizzly-and-jersey-application/) repo for the above implementation.