You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 9.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. # spring-boot-demo-swagger-beauty
  2. > 此 demo 主要演示如何集成第三方的 swagger 来替换原生的 swagger,美化文档样式。本 demo 使用 [swagger-spring-boot-starter](https://github.com/battcn/swagger-spring-boot) 集成。
  3. >
  4. > 启动项目,访问地址:http://localhost:8080/demo/swagger-ui.html#/
  5. >
  6. > 用户名:xkcoding
  7. >
  8. > 密码:123456
  9. ## pom.xml
  10. ```xml
  11. <?xml version="1.0" encoding="UTF-8"?>
  12. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  13. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  14. <modelVersion>4.0.0</modelVersion>
  15. <artifactId>spring-boot-demo-swagger-beauty</artifactId>
  16. <version>1.0.0-SNAPSHOT</version>
  17. <packaging>jar</packaging>
  18. <name>spring-boot-demo-swagger-beauty</name>
  19. <description>Demo project for Spring Boot</description>
  20. <parent>
  21. <groupId>com.xkcoding</groupId>
  22. <artifactId>spring-boot-demo</artifactId>
  23. <version>1.0.0-SNAPSHOT</version>
  24. </parent>
  25. <properties>
  26. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  27. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  28. <java.version>1.8</java.version>
  29. <battcn.swagger.version>2.1.2-RELEASE</battcn.swagger.version>
  30. </properties>
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-web</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. <dependency>
  42. <groupId>com.battcn</groupId>
  43. <artifactId>swagger-spring-boot-starter</artifactId>
  44. <version>${battcn.swagger.version}</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.projectlombok</groupId>
  48. <artifactId>lombok</artifactId>
  49. <optional>true</optional>
  50. </dependency>
  51. </dependencies>
  52. <build>
  53. <finalName>spring-boot-demo-swagger-beauty</finalName>
  54. <plugins>
  55. <plugin>
  56. <groupId>org.springframework.boot</groupId>
  57. <artifactId>spring-boot-maven-plugin</artifactId>
  58. </plugin>
  59. </plugins>
  60. </build>
  61. </project>
  62. ```
  63. ## application.yml
  64. ```yaml
  65. server:
  66. port: 8080
  67. servlet:
  68. context-path: /demo
  69. spring:
  70. swagger:
  71. enabled: true
  72. title: spring-boot-demo
  73. description: 这是一个简单的 Swagger API 演示
  74. version: 1.0.0-SNAPSHOT
  75. contact:
  76. name: Yangkai.Shen
  77. email: 237497819@qq.com
  78. url: http://xkcoding.com
  79. # swagger扫描的基础包,默认:全扫描
  80. # base-package:
  81. # 需要处理的基础URL规则,默认:/**
  82. # base-path:
  83. # 需要排除的URL规则,默认:空
  84. # exclude-path:
  85. security:
  86. # 是否启用 swagger 登录验证
  87. filter-plugin: true
  88. username: xkcoding
  89. password: 123456
  90. global-response-messages:
  91. GET[0]:
  92. code: 400
  93. message: Bad Request,一般为请求参数不对
  94. GET[1]:
  95. code: 404
  96. message: NOT FOUND,一般为请求路径不对
  97. GET[2]:
  98. code: 500
  99. message: ERROR,一般为程序内部错误
  100. POST[0]:
  101. code: 400
  102. message: Bad Request,一般为请求参数不对
  103. POST[1]:
  104. code: 404
  105. message: NOT FOUND,一般为请求路径不对
  106. POST[2]:
  107. code: 500
  108. message: ERROR,一般为程序内部错误
  109. ```
  110. ## ApiResponse.java
  111. ```java
  112. /**
  113. * <p>
  114. * 通用API接口返回
  115. * </p>
  116. *
  117. * @author yangkai.shen
  118. * @date Created in 2018-11-28 14:18
  119. */
  120. @Data
  121. @Builder
  122. @NoArgsConstructor
  123. @AllArgsConstructor
  124. @ApiModel(value = "通用PI接口返回", description = "Common Api Response")
  125. public class ApiResponse<T> implements Serializable {
  126. private static final long serialVersionUID = -8987146499044811408L;
  127. /**
  128. * 通用返回状态
  129. */
  130. @ApiModelProperty(value = "通用返回状态", required = true)
  131. private Integer code;
  132. /**
  133. * 通用返回信息
  134. */
  135. @ApiModelProperty(value = "通用返回信息", required = true)
  136. private String message;
  137. /**
  138. * 通用返回数据
  139. */
  140. @ApiModelProperty(value = "通用返回数据", required = true)
  141. private T data;
  142. }
  143. ```
  144. ## User.java
  145. ```java
  146. /**
  147. * <p>
  148. * 用户实体
  149. * </p>
  150. *
  151. * @author yangkai.shen
  152. * @date Created in 2018-11-28 14:13
  153. */
  154. @Data
  155. @NoArgsConstructor
  156. @AllArgsConstructor
  157. @ApiModel(value = "用户实体", description = "User Entity")
  158. public class User implements Serializable {
  159. private static final long serialVersionUID = 5057954049311281252L;
  160. /**
  161. * 主键id
  162. */
  163. @ApiModelProperty(value = "主键id", required = true)
  164. private Integer id;
  165. /**
  166. * 用户名
  167. */
  168. @ApiModelProperty(value = "用户名", required = true)
  169. private String name;
  170. /**
  171. * 工作岗位
  172. */
  173. @ApiModelProperty(value = "工作岗位", required = true)
  174. private String job;
  175. }
  176. ```
  177. ## UserController.java
  178. ```java
  179. /**
  180. * <p>
  181. * User Controller
  182. * </p>
  183. *
  184. * @author yangkai.shen
  185. * @date Created in 2018-11-28 14:25
  186. */
  187. @RestController
  188. @RequestMapping("/user")
  189. @Api(tags = "1.0.0-SNAPSHOT", description = "用户管理", value = "用户管理")
  190. @Slf4j
  191. public class UserController {
  192. @GetMapping
  193. @ApiOperation(value = "条件查询(DONE)", notes = "备注")
  194. @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", dataType = DataType.STRING, paramType = ParamType.QUERY, defaultValue = "xxx")})
  195. public ApiResponse<User> getByUserName(String username) {
  196. log.info("多个参数用 @ApiImplicitParams");
  197. return ApiResponse.<User>builder().code(200).message("操作成功").data(new User(1, username, "JAVA")).build();
  198. }
  199. @GetMapping("/{id}")
  200. @ApiOperation(value = "主键查询(DONE)", notes = "备注")
  201. @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH)})
  202. public ApiResponse<User> get(@PathVariable Integer id) {
  203. log.info("单个参数用 @ApiImplicitParam");
  204. return ApiResponse.<User>builder().code(200).message("操作成功").data(new User(id, "u1", "p1")).build();
  205. }
  206. @DeleteMapping("/{id}")
  207. @ApiOperation(value = "删除用户(DONE)", notes = "备注")
  208. @ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH)
  209. public void delete(@PathVariable Integer id) {
  210. log.info("单个参数用 ApiImplicitParam");
  211. }
  212. @PostMapping
  213. @ApiOperation(value = "添加用户(DONE)")
  214. public User post(@RequestBody User user) {
  215. log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam");
  216. return user;
  217. }
  218. @PostMapping("/multipar")
  219. @ApiOperation(value = "添加用户(DONE)")
  220. public List<User> multipar(@RequestBody List<User> user) {
  221. log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam");
  222. return user;
  223. }
  224. @PostMapping("/array")
  225. @ApiOperation(value = "添加用户(DONE)")
  226. public User[] array(@RequestBody User[] user) {
  227. log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam");
  228. return user;
  229. }
  230. @PutMapping("/{id}")
  231. @ApiOperation(value = "修改用户(DONE)")
  232. public void put(@PathVariable Long id, @RequestBody User user) {
  233. log.info("如果你不想写 @ApiImplicitParam 那么 swagger 也会使用默认的参数名作为描述信息 ");
  234. }
  235. @PostMapping("/{id}/file")
  236. @ApiOperation(value = "文件上传(DONE)")
  237. public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) {
  238. log.info(file.getContentType());
  239. log.info(file.getName());
  240. log.info(file.getOriginalFilename());
  241. return file.getOriginalFilename();
  242. }
  243. }
  244. ```
  245. ## 参考
  246. - https://github.com/battcn/swagger-spring-boot/blob/master/README.md
  247. - 几款比较好看的swagger-ui,具体使用方法参见各个依赖的官方文档:
  248. - [battcn](https://github.com/battcn) 的 [swagger-spring-boot-starter](https://github.com/battcn/swagger-spring-boot) 文档:https://github.com/battcn/swagger-spring-boot/blob/master/README.md
  249. - [ swagger-ui-layer](https://gitee.com/caspar-chen/Swagger-UI-layer) 文档:https://gitee.com/caspar-chen/Swagger-UI-layer#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8
  250. - [swagger-bootstrap-ui](https://gitee.com/xiaoym/swagger-bootstrap-ui) 文档:https://gitee.com/xiaoym/swagger-bootstrap-ui#%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E
  251. - [swagger-ui-themes](https://github.com/ostranme/swagger-ui-themes) 文档:https://github.com/ostranme/swagger-ui-themes#getting-started