写点什么

接口文档:第二章:使用 Swagger 接口的文档在线自动生成

作者:Java高工P7
  • 2021 年 11 月 12 日
  • 本文字数:3275 字

    阅读完需:约 11 分钟

*/


@Override


public void addConfigurationProperties(Properties properties) {


super.addConfigurationProperties(properties);


this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));


}


/**


  • 给字段添加注释


*/


@Override


public void addFieldComment(Field field, IntrospectedTable introspectedTable,


IntrospectedColumn introspectedColumn) {


String remarks = introspectedColumn.getRemarks();


//根据参数和备注信息判断是否添加备注信息


if(addRemarkComments&&StringUtility.stringHasValue(remarks)){


// addFieldJavaDoc(field, remarks);


//数据库中特殊字符需要转义


if(remarks.contains(""")){


remarks = remarks.replace(""","'");


}


//给 model 的字段添加 swagger 注解


field.addJavaDocLine("@ApiModelProperty(value = ""+remarks+"")");


}


}


/**


  • 给 model 的字段添加注释


*/


private void addFieldJavaDoc(Field field, String remarks) {


//文档注释开始


field.addJavaDocLine("/**");


//获取数据库字段的备注信息


String[] remarkLines = remarks.split(System.getProperty("line.separator"));


for(String remarkLine:remarkLines){


field.addJavaDocLine(" * "+remarkLine);


}


addJavadocTag(field, false);


field.addJavaDocLine(" */");


}


@Override


public void addJavaFileComment(CompilationUnit compilationUnit) {


super.addJavaFileComment(compilationUnit);


//只在 model 中添加 swagger 注解类的导入


if(!compilationUnit.isJavaInterface()&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){


compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));


}


}


}


创建 Swagger2 配置类




在 Application.java 同级创建 Swagger2 的配置类 Swagger2


package com.swaggerTest;


import org.springframework.context.annotation.Bean;


import org.springframework.context.annotation.Configuration;


import springfox.documentation.builders.ApiInfoBuilder;


import springfox.documentation.builders.PathSelectors;


import springfox.documentation.builders.RequestHandlerSelectors;


import springfox.documentation.service.ApiInfo;


import springfox.documentation.spi.DocumentationType;


import springfox.documentation.spring.web.plugins.Docket;


import springfox.documentation.swagger2.annotations.EnableSwagger2;


/**


  • Swagger2 配置类

  • 在与 spring boot 集成时,放在与 Application.java 同级的目录下。

  • 通过 @Configuration 注解,让 Spring 来加载该类配置。

  • 再通过 @EnableSwagger2 注解来启用 Swagger2。


*/


@Configuration


@EnableSwagger2


public class Swagger2 {


/**


  • 创建 API 应用

  • apiInfo() 增加 API 相关信息

  • 通过 select()函数返回一个 ApiSelectorBuilder 实例,用来控制哪些接口暴露给 Swagger 来展现,

  • 本例采用指定扫描的包路径来定义指定要建立 API 的目录。

  • @return


*/


@Bean


public Docket createRestApi() {


return new Docket(DocumentationType.SWAGGER_2)


.apiInfo(apiInfo())


.sel


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


ect()


.apis(RequestHandlerSelectors.basePackage("com.swaggerTest.controller"))


.paths(PathSelectors.any())


.build();


}


/**


  • 创建该 API 的基本信息(这些基本信息会展现在文档页面中)

  • 访问地址:http://项目实际地址/swagger-ui.html

  • @return


*/


private ApiInfo apiInfo() {


return new ApiInfoBuilder()


.title("Spring Boot 中使用 Swagger2 构建 RESTful APIs")


.description("更多请关注http://www.baidu.com")


.termsOfServiceUrl("http://www.baidu.com")


.contact("sunf")


.version("1.0")


.build();


}


}


通过 createRestApi 函数创建 Docket 的 Bean 之后,**apiInfo()**用来创建该 Api 的基本信息(这些基本信息会展现在文档页面中)。


Swagger 使用的注解及其说明:


=====================


@Api:用在类上,说明该类的作用。


@ApiOperation:注解来给 API 增加方法说明。


@ApiImplicitParams : 用在方法上包含一组参数说明。


@ApiImplicitParam:用来注解来给方法入参增加说明。


@ApiResponses:用于表示一组响应


@ApiResponse:用在 @ApiResponses 中,一般用于表达一个错误的响应信息


l?? code:数字,例如 400


l?? message:信息,例如"请求参数没填好"


l?? response:抛出异常的类???


@ApiModel:描述一个 Model 的信息(一般用在请求参数无法使用 @ApiImplicitParam 注解进行描述的时候)


l?? @ApiModelProperty:描述一个 model 的属性


注意:@ApiImplicitParam 的参数说明:


<table border="1" cellpadding="0" cellspacing="0"><tbody><tr><td><p><strong>paramType</strong>:指定参数放在哪个地方</p></td><td><p>header:请求参数放置于 Request Header,使用 @RequestHeader 获取</p><p>query:请求参数放置于请求地址,使用 @RequestParam 获取</p><p>path:(用于 restful 接口)-->请求参数的获取:@PathVariable</p><p>body:(不常用)</p><p>form(不常用)</p></td></tr><tr><td><p>name:参数名</p></td><td><p> </p></td></tr><tr><td><p>dataType:参数类型</p></td><td><p> </p></td></tr><tr><td><p>required:参数是否必须传</p></td><td><p>true | false</p></td></tr><tr><td><p>value:说明参数的意思</p></td><td><p> </p></td></tr><tr><td><p>defaultValue:参数的默认值</p></td><td><p> </p></td></tr></tbody></table>


案例 1:


package com.swaggerTest.controller;


import org.springframework.stereotype.Controller;


import org.springframework.util.StringUtils;


import org.springframework.web.bind.annotation.RequestMapping;


import org.springframework.web.bind.annotation.RequestMethod;


import org.springframework.web.bind.annotation.RequestParam;


import org.springframework.web.bind.annotation.ResponseBody;


import io.swagger.annotations.Api;


import io.swagger.annotations.ApiImplicitParam;


import io.swagger.annotations.ApiImplicitParams;


import io.swagger.annotations.ApiOperation;


/**


  • 一个用来测试 swagger 注解的控制器

  • 注意 @ApiImplicitParam 的使用会影响程序运行,如果使用不当可能造成控制器收不到消息

  • @author SUNF


*/


@Controller


@RequestMapping("/say")


@Api(value = "SayController|一个用来测试 swagger 注解的控制器")


public class SayController {


@ResponseBody


@RequestMapping(value ="/getUserName", method= RequestMethod.GET)


@ApiOperation(value="根据用户编号获取用户姓名", notes="test: 仅 1 和 2 有正确返回")


@ApiImplicitParam(paramType="query", name = "userNumber", value = "用户编号", required = true, dataType = "Integer")


public String getUserName(@RequestParam Integer userNumber){


if(userNumber == 1){


return "张三丰";


}


else if(userNumber == 2){


return "慕容复";


}


else{


return "未知";


}


}


@ResponseBody


@RequestMapping("/updatePassword")


@ApiOperation(value="修改用户密码", notes="根据用户 id 修改密码")


@ApiImplicitParams({


@ApiImplicitParam(paramType="query", name = "userId", value = "用户 ID", required = true, dataType = "Integer"),


@ApiImplicitParam(paramType="query", name = "password", value = "旧密码", required = true, dataType = "String"),


@ApiImplicitParam(paramType="query", name = "newPassword", value = "新密码", required = true, dataType = "String")


})


public String updatePassword(@RequestParam(value="userId") Integer userId, @RequestParam(value="password") String password,


@RequestParam(value="newPassword") String newPassword){


if(userId <= 0 || userId > 2){


return "未知的用户";


}


if(StringUtils.isEmpty(password) || StringUtils.isEmpty(newPassword)){

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
接口文档:第二章:使用Swagger接口的文档在线自动生成