前言
Swagger已经成API service的规范了,本处在dropwizard中简单集成Swagger.
Demo source
https://github.com/Ryan-Miao/l4dropwizard
本文是基于dropwizard入门之上的演进。
确保依赖都是最新的,或者自行解决版本冲突,比如jackson不同版本之间的类有所不同。
添加swagger依赖
1 2 3 4 5
| <dependency> <groupId>com.smoketurner</groupId> <artifactId>dropwizard-swagger</artifactId> <version>1.1.2-1</version> </dependency>
|
在configuration中新增swagger的基础配置
1 2
| @JsonProperty("swagger") private SwaggerBundleConfiguration swaggerBundleConfiguration;
|
在配置文件中,新增
1 2 3 4
| swagger: resourcePackage: com.test.domain.resource schemes: - http
|
新增SwaggerBundle
创建com.test.bundles.SwitchableSwaggerBundle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package com.test.bundles;
import com.test.configuration.HelloWorldConfiguration; import io.dropwizard.setup.Environment; import io.federecio.dropwizard.swagger.SwaggerBundle; import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration;
public class SwitchableSwaggerBundle extends SwaggerBundle<HelloWorldConfiguration> {
@Override protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(HelloWorldConfiguration configuration) { return configuration.getSwaggerBundleConfiguration(); }
@Override public void run(HelloWorldConfiguration configuration, Environment environment) throws Exception { super.run(configuration, environment); } }
|
引入SwaggerBundle
在com.test.HelloWorldApplication#initialize
新增
1
| bootstrap.addBundle(new SwitchableSwaggerBundle());
|
修改Resource类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package com.test.domain.resource;
import com.codahale.metrics.annotation.Timed; import com.test.domain.entiry.GithubUser; import com.test.domain.service.IGithubService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses;
import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType;
@Api("/github") @Path("/github") @Produces(MediaType.APPLICATION_JSON) public class GithubResource {
private IGithubService service;
@Inject public GithubResource(IGithubService service) { this.service = service; }
@GET @Timed @Path("/users/{username}") @ApiOperation(value = "Get github user profile.", notes = "There should be the note.") @ApiResponses({ @ApiResponse(code = 401, message = "Valid credentials are required to access this resource."), @ApiResponse(code = 400, message = "Params not valid."), @ApiResponse(code = 500, message = "Something wrong from the server."), @ApiResponse(code = 200, message = "Success.", response = GithubUser.class) }) public GithubUser getUserProfile(@PathParam("username") final String username) { return service.getUserProfile(username); }
}
|
install&Run
浏览器访问http://localhost:8080/swagger,
结果如下: