相信不管是前端开发还是后端开发,都或多或少被接口文档折磨过。前端经常抱怨后端给的接口文档与实际不符。后端感觉编写和维护接口文档会消耗很多精力,很多时候来不及更新。随着Springboot、Springcloud等微服务的流行,每个前端培训项目都有上百个接口调用。这时候手工编写接口文档,保证文档的实时更新几乎是不可能的,所以这个时候我们就急需一个工具,一个可以帮我们自动生成接口文档,自动更新文档的工具。这是招摇。Swagger提供了一种维护API文档的新方式,它有四大优势:自动生成文档:Swagger只需要少量的注解,就可以根据代码自动生成API文档,保证了文档的时效性。跨语言,支持40多种语言。SwaggerUI呈现的是一个交互式的API文档。我们可以直接在文档页面尝试API调用,无需准备复杂的调用参数。也可以将文档规范导入相关工具(如SoapUI),它会自动为我们创建自动化测试。现在我们知道了Swagger的作用,让我们将它集成到我们的项目中。Swagger集成集成Swagger非常简单,只需要三个简单的步骤。第一步:引入依赖包io.springfoxspringfox-swagger22.9.2io.springfoxspringfox-swagger-ui2.9.2第二步:修改配置文件application.properties,添加控制是否启用Swagger的配置。生产环境记得关闭Swagger,设置值为falsespringfox.swagger2.enabled=true2.添加一个swagger配置类@Configuration@EnableSwagger2@ConditionalOnClass(Docket.class)publicclassSwaggerConfig{privatestaticfinalStringVERSION="1.0";@Value("${springfox.swagger2.enabled}")privateBooleanswaggerEnabled;@BeanpublicDocketcreateRestApi(){returnnewDocket(DocumentationType.SWAGGER_2).enable(swaggerEnabled).groupName("SwaggerDemo")。apiInfo(apiInfo()).select().apis(请求estHandlerSelectors.withClassAnnotation(Api.class)).paths(PathSelectors.any()).build();}/***添加概要信息*/privateApiInfoapiInfo(){returnnewApiInfoBuilder().title("接口文档").contact(newContact("JAVA日知录","http://javadaily.cn","jianzh5@163.com")).description("Swagger接口文档").version(VERSION).build();}}这里通过.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)),标记为@Api注解的类自动生成接口文档第三步配置API接口@RestController@Api(tags="参数验证")@Slf4j@ValidatedpublicclassValidController{@PostMapping("/valid/test1")@ApiOperation("RequestBody验证")publicStringtest1(@Validated@RequestBodyValidVOvalidVO){log.info("validEntityis{}",validVO);return"test1validsuccess";}@ApiOperation("FormValidation")@PostMapping(value="/valid/test2")publicStringtest2(@ValidatedValidVOvalidVO){log.info("validEntityis{}",validVO);return"test2validsuccess";}@ApiOperation("单参数验证")@PostMapping(value="/valid/test3")publicStringtest3(@EmailStringemail){log.info("emailis{}",电子邮件);return"emailvalidsuccess";}}通过@Api注解需要生成接口文件,通过@ApiOperation注解标注接口名称。同时,我们也给ValidVO加上相应的注解@Data@ApiModel(value="参数验证类")publicclassValidVO{@ApiModelProperty("ID")privateStringid;@ApiModelProperty(value="应用ID",example="cloud")privateStringappId;@NotEmpty(message="levelcannotbeempty")@ApiModelProperty(value="level")privateStringlevel;@ApiModelProperty(value="age")privateintage;...}这是@ApiModel标注的参数实体,@ApiModelProperty标注的字段描述。无法推断基本url只需三个步骤即可。我们的项目集成了Swagger接口文档。快速启动服务,访问http://localhost:8080/swagger...即可体验。好吧,出了点问题,但不要惊慌。出现这个问题的原因是我们添加了ResponseBodyAdvice统一处理返回值/响应体,导致对Swagger的返回值进行了一层包裹,无法解析UI页面。可以通过http://localhost:8080/v2/api-....观察Swagger返回的json数据。既然知道了问题的原因,那么解决起来就很简单了。我们只需要在ResponseBodyAdvice处理类中转换自己项目的接口即可。@RestControllerAdvice(basePackages="com.jianzh5.blog")@Slf4jpublicclassResponseAdviceimplementsResponseBodyAdvice