diff --git a/3.md b/3.md new file mode 100644 index 0000000..f3ff14b --- /dev/null +++ b/3.md @@ -0,0 +1,153 @@ +# spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 + +##前言 + +###不能同步更新API文档会有什么问题? + +>理想情况下,为所开发的服务编写接口文档,能提高与周边系统对接联调的效率.但前提条件是,服务和API文档必须是同步更新的,如果不能保证同步,那接口文档就会流于形式,不仅不能起到应有的作用,甚至某些情况下,甚至会误导对接的系统,导致更低效率的沟通. + +##思路 + +- 根据现有的服务定义来自动生成接口文档 + +##实现 + +###1.pom.xml集成springfox-swagger2 + + +``` xml + + + io.springfox + springfox-swagger2 + ${springfox-swagger2.version} + + + io.springfox + springfox-swagger-ui + ${springfox-swagger2.version} + +``` + +###2.创建Swagger2Config类 + +``` java +@Configuration +@EnableSwagger2 +public class Swagger2Config { + + +} +``` + + +###3.配置Bean + +``` java + @Bean + public WebMvcConfigurerAdapter addResourceHandlers() { + return new WebMvcConfigurerAdapter() { + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + }; + } +``` + +注意点 : 版本号和项目名称可在配置文件中定义(从pom中取) + +``` java + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() + .apis(RequestHandlerSelectors.basePackage("com.egridcloud")).paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder(); + apiInfoBuilder.title(this.projectName + " online api document"); + apiInfoBuilder.version(version); + return apiInfoBuilder.build(); + } +``` + +###4.使用@Api来标记controller + +``` java +@RestController +@RequestMapping("demo") +@Api(value = "demo", + consumes = "application/json", + produces = "application/json", + protocols = "http") +public class DemoController { + +} +``` + +###5.使用@ApiOperation来标记方法 + +``` java + @ApiOperation(value = "add", notes = "add") + @RequestMapping(value = "add", method = RequestMethod.GET) + public RestResponse add(Integer a, Integer b) { + return new RestResponse<>(demoService.add(a, b)); + } +``` + +###6.使用@ApiImplicitParams和@ApiImplicitParam来标参数 + +``` java + @ApiOperation(value = "add", notes = "add") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "query", name = "a", value = "a", required = true, + dataType = "int"), + @ApiImplicitParam(paramType = "query", name = "b", value = "a", required = true, + dataType = "int") }) + @RequestMapping(value = "add", method = RequestMethod.GET) + public RestResponse add(Integer a, Integer b) { + return new RestResponse<>(demoService.add(a, b)); + } +``` + +###7.使用@ApiModel和@ApiModelProperty来标实体类 + +``` java +@ApiModel(description = "响应消息体") +public class RestResponse implements Serializable { + + /** + * + * 描述 : id + * + */ + private static final long serialVersionUID = 1L; + + /** + * 描述 : 响应ID + */ + @ApiModelProperty(value = "响应ID", required = true, dataType = "string") + private String id = UUID.randomUUID().toString(); + + ............. + +} +``` + +##结束 + +以上配置结束之后,启动项目,访问`http://xxxxx/swagger-ui.html`即可能够访问接口文档,并且直接可以做接口调用测试. + +然后对于Swagger2这个组件,目前看下来就是对业务代码有一定的入侵,总之使用前请根据自身项目情况做好评估,不要盲目跟风. + +--------- + +想获得最快更新,请关注公众号 + +![想获得最快更新,请关注公众号](https://mmbiz.qlogo.cn/mmbiz_jpg/gjOvoY7GOt5a4dicfGbqze591YAEiaRONE0nOsiaur4nlsmKtUpRuONue28wJ9JfOXfBl99OoVmYncohMnEY4LMdg/0?wx_fmt=jpeg "想获得最快更新,请关注公众号") + diff --git a/udf-starter-core/src/main/java/com/egridcloud/udf/core/Swagger2Config.java b/udf-starter-core/src/main/java/com/egridcloud/udf/core/Swagger2Config.java index 4003b93..4cc68b6 100644 --- a/udf-starter-core/src/main/java/com/egridcloud/udf/core/Swagger2Config.java +++ b/udf-starter-core/src/main/java/com/egridcloud/udf/core/Swagger2Config.java @@ -28,7 +28,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; */ @Configuration @EnableSwagger2 -public class Swagger2Config extends WebMvcConfigurerAdapter { +public class Swagger2Config { /** * 描述 : 系统版本 @@ -42,12 +42,22 @@ public class Swagger2Config extends WebMvcConfigurerAdapter { @Value("${info.build.name}") private String projectName; - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("swagger-ui.html") - .addResourceLocations("classpath:/META-INF/resources/"); - registry.addResourceHandler("/webjars/**") - .addResourceLocations("classpath:/META-INF/resources/webjars/"); + /** + * 描述 : addResourceHandlers + * + * @return WebMvcConfigurerAdapter + */ + @Bean + public WebMvcConfigurerAdapter addResourceHandlers() { + return new WebMvcConfigurerAdapter() { + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + }; } /**