diff --git a/common-tools/pom.xml b/common-tools/pom.xml index cd711f8..6618144 100644 --- a/common-tools/pom.xml +++ b/common-tools/pom.xml @@ -25,12 +25,19 @@ cn.hutool hutool-all + com.google.guava guava + io.swagger.core.v3 + swagger-annotations-jakarta + 2.2.2 + + + org.projectlombok lombok true diff --git a/common-tools/src/main/java/com/xkcoding/common/model/viewmodel/Response.java b/common-tools/src/main/java/com/xkcoding/common/model/viewmodel/Response.java index 66e9c8c..5641564 100644 --- a/common-tools/src/main/java/com/xkcoding/common/model/viewmodel/Response.java +++ b/common-tools/src/main/java/com/xkcoding/common/model/viewmodel/Response.java @@ -3,6 +3,7 @@ package com.xkcoding.common.model.viewmodel; import com.xkcoding.common.enums.CommonStatus; import com.xkcoding.common.enums.base.IStatus; import com.xkcoding.common.exception.CommonBizException; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; @@ -14,20 +15,24 @@ import java.io.Serializable; * @date 2022-08-20 01:43 */ @Data +@Schema(name = "Response", title = "通用PI接口返回", description = "Common Api Response") public class Response implements Serializable { /** * 状态码 */ + @Schema(title = "状态码", required = true) private Integer code; /** * 返回内容 */ + @Schema(title = "返回内容", required = true) private String message; /** * 返回数据 */ + @Schema(title = "返回数据", required = false) private T data; private Response() { diff --git a/demo-apidoc/demo-apidoc-springdoc/README.md b/demo-apidoc/demo-apidoc-springdoc/README.md new file mode 100644 index 0000000..95047b1 --- /dev/null +++ b/demo-apidoc/demo-apidoc-springdoc/README.md @@ -0,0 +1,179 @@ +## spring-boot-demo-springdoc + +> 此 demo 主要演示了 Spring Boot 如何通过 Springdoc 集成 swagger + +### 1.开发步骤 +#### 1.1.添加依赖 + +> 3.0.0-M4 依赖的 servlet 为 jakarta,目前 release 的 Springdoc 依赖的是 javax.servlet-api,需要同时使用最新的 2.0.0-M5 + +```xml + + + com.xkcoding + common-tools + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + ${springdoc.version} + + + + org.projectlombok + lombok + true + + +``` + +#### 1.2.编写测试接口 + +```java +@Slf4j +@RestController +@RequestMapping("/user") +@Tag(name = "用户管理", description = "用户管理") +public class UserController { + @GetMapping + @Operation(summary = "条件查询(DONE)", description = "备注") + @Parameters({ + @Parameter(name = "username", description = "用户名", in = ParameterIn.QUERY, schema = @Schema(implementation = String.class), required = true) + }) + public Response getByUserName(String username) { + log.info("多个参数用 @Parameters"); + return Response.ofSuccess(new User(1, username, "JAVA")); + } + + @GetMapping("/{id}") + @Operation(summary = "主键查询(DONE)", description = "备注") + @Parameters({ + @Parameter(name = "id", description = "用户编号", in = ParameterIn.PATH, schema = @Schema(implementation = Integer.class), required = true) + }) + public Response get(@PathVariable Integer id) { + log.info("单个参数用 @Parameter"); + return Response.ofSuccess(new User(id, "u1", "p1")); + } + + @DeleteMapping("/{id}") + @Operation(summary = "删除用户(DONE)", description = "备注") + @Parameter(name = "id", description = "用户编号", in = ParameterIn.PATH, schema = @Schema(implementation = Integer.class), required = true) + public void delete(@PathVariable Integer id) { + log.info("单个参数用 Parameter"); + } + + @PostMapping + @Operation(summary = "添加用户(DONE)") + public User post(@RequestBody User user) { + log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @Parameter"); + return user; + } + + @PostMapping("/multipar") + @Operation(summary = "添加用户(DONE)") + public List multipar(@RequestBody List user) { + log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @Parameter"); + return user; + } + + @PostMapping("/array") + @Operation(summary = "添加用户(DONE)") + public User[] array(@RequestBody User[] user) { + log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @Parameter"); + return user; + } + + @PutMapping("/{id}") + @Operation(summary = "修改用户(DONE)") + public void put(@PathVariable Long id, @RequestBody User user) { + log.info("如果你不想写 @Parameter 那么 swagger 也会使用默认的参数名作为描述信息 "); + } + + @PostMapping("/{id}/file") + @Operation(summary = "文件上传(DONE)") + public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) { + log.info(file.getContentType()); + log.info(file.getName()); + log.info(file.getOriginalFilename()); + return file.getOriginalFilename(); + } +} + +``` + +#### 1.3.编写返回对象 + +```java +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "User", title = "用户实体", description = "User Entity") +public class User implements Serializable { + @Serial + private static final long serialVersionUID = 5057954049311281252L; + /** + * 主键id + */ + @Schema(title = "主键id", required = true) + private Integer id; + /** + * 用户名 + */ + @Schema(title = "用户名", required = true) + private String name; + /** + * 工作岗位 + */ + @Schema(title = "工作岗位", required = true) + private String job; +} +``` + +#### 1.4.配置 Springdoc + +- **SpringdocAutoConfiguration** + +```java +@Configuration(proxyBeanMethods = false) +@OpenAPIDefinition(info = @Info(title = "spring-boot-demo-apidoc-swagger", version = "1.0.0-SNAPSHOT", description = "这是一个简单的 Swagger API 演示", contact = @Contact(name = "Yangkai.Shen", url = "https://xkcoding.com", email = "237497819@qq.com")), + externalDocs = @ExternalDocumentation(description = "springdoc官方文档", url = "https://springdoc.org/"), + servers = @Server(url = "http://localhost:8080/demo") +) +public class SpringdocAutoConfiguration implements WebMvcConfigurer { + +} +``` + +- **application.yml** + +```yaml +server: + port: 8080 + servlet: + context-path: /demo +springdoc: + swagger-ui: + path: /swagger-ui.html + packages-to-scan: com.xkcoding.swagger.controller +``` + +### 2.测试 + +启动项目,访问地址:http://localhost:8080/demo/swagger-ui/index.html + +### 3.参考 + +- [Springdoc 官方文档](https://springdoc.org/) +- [Springfox 迁移到 Springdoc 步骤](https://springdoc.org/#migrating-from-springfox) diff --git a/demo-apidoc/demo-apidoc-springdoc/pom.xml b/demo-apidoc/demo-apidoc-springdoc/pom.xml new file mode 100644 index 0000000..0e3fca5 --- /dev/null +++ b/demo-apidoc/demo-apidoc-springdoc/pom.xml @@ -0,0 +1,65 @@ + + + + com.xkcoding + demo-apidoc + 1.0.0-SNAPSHOT + + + 4.0.0 + + demo-apidoc-springdoc + 1.0.0-SNAPSHOT + jar + + demo-apidoc-springdoc + Demo project for Spring Boot + + + 17 + + 2.0.0-M5 + + + + + com.xkcoding + common-tools + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + ${springdoc.version} + + + + org.projectlombok + lombok + true + + + + + demo-apidoc-springdoc + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplication.java b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/SpringdocApplication.java similarity index 57% rename from demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplication.java rename to demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/SpringdocApplication.java index 1f9dbae..50e355c 100644 --- a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplication.java +++ b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/SpringdocApplication.java @@ -1,4 +1,4 @@ -package com.xkcoding.swagger; +package com.xkcoding.springdoc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,12 +9,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; *

* * @author yangkai.shen - * @date Created in 2018-11-29 13:25 + * @date Created in 2022-09-06 17:04 */ @SpringBootApplication -public class SpringBootDemoSwaggerApplication { +public class SpringdocApplication { public static void main(String[] args) { - SpringApplication.run(SpringBootDemoSwaggerApplication.class, args); + SpringApplication.run(SpringdocApplication.class, args); } } diff --git a/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/config/SpringdocAutoConfiguration.java b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/config/SpringdocAutoConfiguration.java new file mode 100644 index 0000000..b4c1022 --- /dev/null +++ b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/config/SpringdocAutoConfiguration.java @@ -0,0 +1,26 @@ +package com.xkcoding.springdoc.config; + +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.info.Contact; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.servers.Server; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + *

+ * Springdoc 基础配置 + *

+ * + * @author yangkai.shen + * @date Created in 2022-09-06 22:37 + */ +@Configuration(proxyBeanMethods = false) +@OpenAPIDefinition(info = @Info(title = "spring-boot-demo-apidoc-swagger", version = "1.0.0-SNAPSHOT", description = "这是一个简单的 Swagger API 演示", contact = @Contact(name = "Yangkai.Shen", url = "https://xkcoding.com", email = "237497819@qq.com")), + externalDocs = @ExternalDocumentation(description = "springdoc官方文档", url = "https://springdoc.org/"), + servers = @Server(url = "http://localhost:8080/demo") +) +public class SpringdocAutoConfiguration implements WebMvcConfigurer { + +} diff --git a/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/controller/UserController.java b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/controller/UserController.java new file mode 100644 index 0000000..96660c2 --- /dev/null +++ b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/controller/UserController.java @@ -0,0 +1,90 @@ +package com.xkcoding.springdoc.controller; + +import com.xkcoding.common.model.viewmodel.Response; +import com.xkcoding.springdoc.entity.User; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * 测试接口 + * + * @author 一珩(沈扬凯 yk.shen@tuya.com) + * @date 2022-09-06 22:36 + */ +@Slf4j +@RestController +@RequestMapping("/user") +@Tag(name = "用户管理", description = "用户管理") +public class UserController { + @GetMapping + @Operation(summary = "条件查询(DONE)", description = "备注") + @Parameters({ + @Parameter(name = "username", description = "用户名", in = ParameterIn.QUERY, schema = @Schema(implementation = String.class), required = true) + }) + public Response getByUserName(String username) { + log.info("多个参数用 @Parameters"); + return Response.ofSuccess(new User(1, username, "JAVA")); + } + + @GetMapping("/{id}") + @Operation(summary = "主键查询(DONE)", description = "备注") + @Parameters({ + @Parameter(name = "id", description = "用户编号", in = ParameterIn.PATH, schema = @Schema(implementation = Integer.class), required = true) + }) + public Response get(@PathVariable Integer id) { + log.info("单个参数用 @Parameter"); + return Response.ofSuccess(new User(id, "u1", "p1")); + } + + @DeleteMapping("/{id}") + @Operation(summary = "删除用户(DONE)", description = "备注") + @Parameter(name = "id", description = "用户编号", in = ParameterIn.PATH, schema = @Schema(implementation = Integer.class), required = true) + public void delete(@PathVariable Integer id) { + log.info("单个参数用 Parameter"); + } + + @PostMapping + @Operation(summary = "添加用户(DONE)") + public User post(@RequestBody User user) { + log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @Parameter"); + return user; + } + + @PostMapping("/multipar") + @Operation(summary = "添加用户(DONE)") + public List multipar(@RequestBody List user) { + log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @Parameter"); + return user; + } + + @PostMapping("/array") + @Operation(summary = "添加用户(DONE)") + public User[] array(@RequestBody User[] user) { + log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @Parameter"); + return user; + } + + @PutMapping("/{id}") + @Operation(summary = "修改用户(DONE)") + public void put(@PathVariable Long id, @RequestBody User user) { + log.info("如果你不想写 @Parameter 那么 swagger 也会使用默认的参数名作为描述信息 "); + } + + @PostMapping("/{id}/file") + @Operation(summary = "文件上传(DONE)") + public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) { + log.info(file.getContentType()); + log.info(file.getName()); + log.info(file.getOriginalFilename()); + return file.getOriginalFilename(); + } +} diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/entity/User.java b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/entity/User.java similarity index 54% rename from demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/entity/User.java rename to demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/entity/User.java index a89baea..ec45f8a 100644 --- a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/entity/User.java +++ b/demo-apidoc/demo-apidoc-springdoc/src/main/java/com/xkcoding/springdoc/entity/User.java @@ -1,40 +1,41 @@ -package com.xkcoding.swagger.entity; +package com.xkcoding.springdoc.entity; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; /** *

- * 用户实体 + * 测试用户 *

* * @author yangkai.shen - * @date Created in 2018-11-29 11:31 + * @date Created in 2022-09-06 22:37 */ @Data @NoArgsConstructor @AllArgsConstructor -@ApiModel(value = "用户实体", description = "User Entity") +@Schema(name = "User", title = "用户实体", description = "User Entity") public class User implements Serializable { + @Serial private static final long serialVersionUID = 5057954049311281252L; /** * 主键id */ - @ApiModelProperty(value = "主键id", required = true) + @Schema(title = "主键id", required = true) private Integer id; /** * 用户名 */ - @ApiModelProperty(value = "用户名", required = true) + @Schema(title = "用户名", required = true) private String name; /** * 工作岗位 */ - @ApiModelProperty(value = "工作岗位", required = true) + @Schema(title = "工作岗位", required = true) private String job; } diff --git a/demo-apidoc/demo-apidoc-springdoc/src/main/resources/application.yml b/demo-apidoc/demo-apidoc-springdoc/src/main/resources/application.yml new file mode 100644 index 0000000..c897855 --- /dev/null +++ b/demo-apidoc/demo-apidoc-springdoc/src/main/resources/application.yml @@ -0,0 +1,8 @@ +server: + port: 8080 + servlet: + context-path: /demo +springdoc: + swagger-ui: + path: /swagger-ui.html + packages-to-scan: com.xkcoding.swagger.controller diff --git a/demo-apidoc/demo-apidoc-springdoc/src/test/java/com/xkcoding/springdoc/SpringdocApplicationTests.java b/demo-apidoc/demo-apidoc-springdoc/src/test/java/com/xkcoding/springdoc/SpringdocApplicationTests.java new file mode 100644 index 0000000..b906bf2 --- /dev/null +++ b/demo-apidoc/demo-apidoc-springdoc/src/test/java/com/xkcoding/springdoc/SpringdocApplicationTests.java @@ -0,0 +1,13 @@ +package com.xkcoding.springdoc; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SpringdocApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/.gitignore b/demo-apidoc/demo-apidoc-swagger-beauty/.gitignore deleted file mode 100644 index 82eca33..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -/target/ -!.mvn/wrapper/maven-wrapper.jar - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/build/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ \ No newline at end of file diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/README.md b/demo-apidoc/demo-apidoc-swagger-beauty/README.md deleted file mode 100644 index b488af5..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# spring-boot-demo-swagger-beauty - -> 此 demo 主要演示如何集成第三方的 swagger 来替换原生的 swagger,美化文档样式。本 demo 使用 [swagger-spring-boot-starter](https://github.com/battcn/swagger-spring-boot) 集成。 -> -> 启动项目,访问地址:http://localhost:8080/demo/swagger-ui.html#/ -> -> 用户名:xkcoding -> -> 密码:123456 - -## pom.xml - -```xml - - - 4.0.0 - - spring-boot-demo-swagger-beauty - 1.0.0-SNAPSHOT - jar - - spring-boot-demo-swagger-beauty - Demo project for Spring Boot - - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - - - UTF-8 - UTF-8 - 1.8 - 2.1.2-RELEASE - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - com.battcn - swagger-spring-boot-starter - ${battcn.swagger.version} - - - - org.projectlombok - lombok - true - - - - - spring-boot-demo-swagger-beauty - - - org.springframework.boot - spring-boot-maven-plugin - - - - - -``` - -## application.yml - -```yaml -server: - port: 8080 - servlet: - context-path: /demo -spring: - swagger: - enabled: true - title: spring-boot-demo - description: 这是一个简单的 Swagger API 演示 - version: 1.0.0-SNAPSHOT - contact: - name: Yangkai.Shen - email: 237497819@qq.com - url: http://xkcoding.com - # swagger扫描的基础包,默认:全扫描 - # base-package: - # 需要处理的基础URL规则,默认:/** - # base-path: - # 需要排除的URL规则,默认:空 - # exclude-path: - security: - # 是否启用 swagger 登录验证 - filter-plugin: true - username: xkcoding - password: 123456 - global-response-messages: - GET[0]: - code: 400 - message: Bad Request,一般为请求参数不对 - GET[1]: - code: 404 - message: NOT FOUND,一般为请求路径不对 - GET[2]: - code: 500 - message: ERROR,一般为程序内部错误 - POST[0]: - code: 400 - message: Bad Request,一般为请求参数不对 - POST[1]: - code: 404 - message: NOT FOUND,一般为请求路径不对 - POST[2]: - code: 500 - message: ERROR,一般为程序内部错误 -``` - -## ApiResponse.java - -```java -/** - *

- * 通用API接口返回 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-28 14:18 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(value = "通用PI接口返回", description = "Common Api Response") -public class ApiResponse implements Serializable { - private static final long serialVersionUID = -8987146499044811408L; - /** - * 通用返回状态 - */ - @ApiModelProperty(value = "通用返回状态", required = true) - private Integer code; - /** - * 通用返回信息 - */ - @ApiModelProperty(value = "通用返回信息", required = true) - private String message; - /** - * 通用返回数据 - */ - @ApiModelProperty(value = "通用返回数据", required = true) - private T data; -} -``` - -## User.java - -```java -/** - *

- * 用户实体 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-28 14:13 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(value = "用户实体", description = "User Entity") -public class User implements Serializable { - private static final long serialVersionUID = 5057954049311281252L; - /** - * 主键id - */ - @ApiModelProperty(value = "主键id", required = true) - private Integer id; - /** - * 用户名 - */ - @ApiModelProperty(value = "用户名", required = true) - private String name; - /** - * 工作岗位 - */ - @ApiModelProperty(value = "工作岗位", required = true) - private String job; -} -``` - -## UserController.java - -```java -/** - *

- * User Controller - *

- * - * @author yangkai.shen - * @date Created in 2018-11-28 14:25 - */ -@RestController -@RequestMapping("/user") -@Api(tags = "1.0.0-SNAPSHOT", description = "用户管理", value = "用户管理") -@Slf4j -public class UserController { - @GetMapping - @ApiOperation(value = "条件查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", dataType = DataType.STRING, paramType = ParamType.QUERY, defaultValue = "xxx")}) - public ApiResponse getByUserName(String username) { - log.info("多个参数用 @ApiImplicitParams"); - return ApiResponse.builder().code(200).message("操作成功").data(new User(1, username, "JAVA")).build(); - } - - @GetMapping("/{id}") - @ApiOperation(value = "主键查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH)}) - public ApiResponse get(@PathVariable Integer id) { - log.info("单个参数用 @ApiImplicitParam"); - return ApiResponse.builder().code(200).message("操作成功").data(new User(id, "u1", "p1")).build(); - } - - @DeleteMapping("/{id}") - @ApiOperation(value = "删除用户(DONE)", notes = "备注") - @ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH) - public void delete(@PathVariable Integer id) { - log.info("单个参数用 ApiImplicitParam"); - } - - @PostMapping - @ApiOperation(value = "添加用户(DONE)") - public User post(@RequestBody User user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PostMapping("/multipar") - @ApiOperation(value = "添加用户(DONE)") - public List multipar(@RequestBody List user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - - return user; - } - - @PostMapping("/array") - @ApiOperation(value = "添加用户(DONE)") - public User[] array(@RequestBody User[] user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PutMapping("/{id}") - @ApiOperation(value = "修改用户(DONE)") - public void put(@PathVariable Long id, @RequestBody User user) { - log.info("如果你不想写 @ApiImplicitParam 那么 swagger 也会使用默认的参数名作为描述信息 "); - } - - @PostMapping("/{id}/file") - @ApiOperation(value = "文件上传(DONE)") - public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) { - log.info(file.getContentType()); - log.info(file.getName()); - log.info(file.getOriginalFilename()); - return file.getOriginalFilename(); - } -} -``` - -## 参考 - -- https://github.com/battcn/swagger-spring-boot/blob/master/README.md -- 几款比较好看的swagger-ui,具体使用方法参见各个依赖的官方文档: - - [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 - - [ 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 - - [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 - - [swagger-ui-themes](https://github.com/ostranme/swagger-ui-themes) 文档:https://github.com/ostranme/swagger-ui-themes#getting-started diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/pom.xml b/demo-apidoc/demo-apidoc-swagger-beauty/pom.xml deleted file mode 100644 index 80704d2..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - 4.0.0 - - demo-swagger-beauty - 1.0.0-SNAPSHOT - jar - - demo-swagger-beauty - Demo project for Spring Boot - - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - - - UTF-8 - UTF-8 - 1.8 - 2.1.2-RELEASE - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - com.battcn - swagger-spring-boot-starter - ${battcn.swagger.version} - - - - org.projectlombok - lombok - true - - - - - demo-swagger-beauty - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplication.java b/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplication.java deleted file mode 100644 index 349509d..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplication.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xkcoding.swagger.beauty; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - *

- * 启动器 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-28 11:18 - */ -@SpringBootApplication -public class SpringBootDemoSwaggerBeautyApplication { - - public static void main(String[] args) { - SpringApplication.run(SpringBootDemoSwaggerBeautyApplication.class, args); - } -} diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/common/ApiResponse.java b/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/common/ApiResponse.java deleted file mode 100644 index f7ae5bd..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/common/ApiResponse.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xkcoding.swagger.beauty.common; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - *

- * 通用API接口返回 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-28 14:18 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(value = "通用PI接口返回", description = "Common Api Response") -public class ApiResponse implements Serializable { - private static final long serialVersionUID = -8987146499044811408L; - /** - * 通用返回状态 - */ - @ApiModelProperty(value = "通用返回状态", required = true) - private Integer code; - /** - * 通用返回信息 - */ - @ApiModelProperty(value = "通用返回信息", required = true) - private String message; - /** - * 通用返回数据 - */ - @ApiModelProperty(value = "通用返回数据", required = true) - private T data; -} diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/controller/UserController.java b/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/controller/UserController.java deleted file mode 100644 index 9fbb39d..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/controller/UserController.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.xkcoding.swagger.beauty.controller; - -import com.battcn.boot.swagger.model.DataType; -import com.battcn.boot.swagger.model.ParamType; -import com.xkcoding.swagger.beauty.common.ApiResponse; -import com.xkcoding.swagger.beauty.entity.User; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.util.List; - -/** - *

- * User Controller - *

- * - * @author yangkai.shen - * @date Created in 2018-11-28 14:25 - */ -@RestController -@RequestMapping("/user") -@Api(tags = "1.0.0-SNAPSHOT", description = "用户管理", value = "用户管理") -@Slf4j -public class UserController { - @GetMapping - @ApiOperation(value = "条件查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", dataType = DataType.STRING, paramType = ParamType.QUERY, defaultValue = "xxx")}) - public ApiResponse getByUserName(String username) { - log.info("多个参数用 @ApiImplicitParams"); - return ApiResponse.builder().code(200).message("操作成功").data(new User(1, username, "JAVA")).build(); - } - - @GetMapping("/{id}") - @ApiOperation(value = "主键查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH)}) - public ApiResponse get(@PathVariable Integer id) { - log.info("单个参数用 @ApiImplicitParam"); - return ApiResponse.builder().code(200).message("操作成功").data(new User(id, "u1", "p1")).build(); - } - - @DeleteMapping("/{id}") - @ApiOperation(value = "删除用户(DONE)", notes = "备注") - @ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH) - public void delete(@PathVariable Integer id) { - log.info("单个参数用 ApiImplicitParam"); - } - - @PostMapping - @ApiOperation(value = "添加用户(DONE)") - public User post(@RequestBody User user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PostMapping("/multipar") - @ApiOperation(value = "添加用户(DONE)") - public List multipar(@RequestBody List user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - - return user; - } - - @PostMapping("/array") - @ApiOperation(value = "添加用户(DONE)") - public User[] array(@RequestBody User[] user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PutMapping("/{id}") - @ApiOperation(value = "修改用户(DONE)") - public void put(@PathVariable Long id, @RequestBody User user) { - log.info("如果你不想写 @ApiImplicitParam 那么 swagger 也会使用默认的参数名作为描述信息 "); - } - - @PostMapping("/{id}/file") - @ApiOperation(value = "文件上传(DONE)") - public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) { - log.info(file.getContentType()); - log.info(file.getName()); - log.info(file.getOriginalFilename()); - return file.getOriginalFilename(); - } -} diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/entity/User.java b/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/entity/User.java deleted file mode 100644 index 3a75323..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/entity/User.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.xkcoding.swagger.beauty.entity; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - *

- * 用户实体 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-28 14:13 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(value = "用户实体", description = "User Entity") -public class User implements Serializable { - private static final long serialVersionUID = 5057954049311281252L; - /** - * 主键id - */ - @ApiModelProperty(value = "主键id", required = true) - private Integer id; - /** - * 用户名 - */ - @ApiModelProperty(value = "用户名", required = true) - private String name; - /** - * 工作岗位 - */ - @ApiModelProperty(value = "工作岗位", required = true) - private String job; -} diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/resources/application.yml b/demo-apidoc/demo-apidoc-swagger-beauty/src/main/resources/application.yml deleted file mode 100644 index 03be67e..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/src/main/resources/application.yml +++ /dev/null @@ -1,45 +0,0 @@ -server: - port: 8080 - servlet: - context-path: /demo -spring: - swagger: - enabled: true - title: spring-boot-demo - base-package: com.xkcoding.swagger.beauty.controller - description: 这是一个简单的 Swagger API 演示 - version: 1.0.0-SNAPSHOT - contact: - name: Yangkai.Shen - email: 237497819@qq.com - url: http://xkcoding.com - # swagger扫描的基础包,默认:全扫描 - # base-package: - # 需要处理的基础URL规则,默认:/** - # base-path: - # 需要排除的URL规则,默认:空 - # exclude-path: - security: - # 是否启用 swagger 登录验证 - filter-plugin: true - username: xkcoding - password: 123456 - global-response-messages: - GET[0]: - code: 400 - message: Bad Request,一般为请求参数不对 - GET[1]: - code: 404 - message: NOT FOUND,一般为请求路径不对 - GET[2]: - code: 500 - message: ERROR,一般为程序内部错误 - POST[0]: - code: 400 - message: Bad Request,一般为请求参数不对 - POST[1]: - code: 404 - message: NOT FOUND,一般为请求路径不对 - POST[2]: - code: 500 - message: ERROR,一般为程序内部错误 diff --git a/demo-apidoc/demo-apidoc-swagger-beauty/src/test/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplicationTests.java b/demo-apidoc/demo-apidoc-swagger-beauty/src/test/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplicationTests.java deleted file mode 100644 index ffba16e..0000000 --- a/demo-apidoc/demo-apidoc-swagger-beauty/src/test/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xkcoding.swagger.beauty; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class SpringBootDemoSwaggerBeautyApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/demo-apidoc/demo-apidoc-swagger/.gitignore b/demo-apidoc/demo-apidoc-swagger/.gitignore deleted file mode 100644 index 82eca33..0000000 --- a/demo-apidoc/demo-apidoc-swagger/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -/target/ -!.mvn/wrapper/maven-wrapper.jar - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/build/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ \ No newline at end of file diff --git a/demo-apidoc/demo-apidoc-swagger/README.md b/demo-apidoc/demo-apidoc-swagger/README.md deleted file mode 100644 index 77f3bd6..0000000 --- a/demo-apidoc/demo-apidoc-swagger/README.md +++ /dev/null @@ -1,244 +0,0 @@ -# spring-boot-demo-swagger - -> 此 demo 主要演示了 Spring Boot 如何集成原生 swagger ,自动生成 API 文档。 -> -> 启动项目,访问地址:http://localhost:8080/demo/swagger-ui.html#/ - -# pom.xml - -```xml - - - 4.0.0 - - spring-boot-demo-swagger - 1.0.0-SNAPSHOT - jar - - spring-boot-demo-swagger - Demo project for Spring Boot - - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - - - UTF-8 - UTF-8 - 1.8 - 2.9.2 - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - io.springfox - springfox-swagger2 - ${swagger.version} - - - - io.springfox - springfox-swagger-ui - ${swagger.version} - - - - org.projectlombok - lombok - true - - - - - spring-boot-demo-swagger - - - org.springframework.boot - spring-boot-maven-plugin - - - - - -``` - -## Swagger2Config.java - -```java -/** - *

- * Swagger2 配置 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 11:14 - */ -@Configuration -@EnableSwagger2 -public class Swagger2Config { - - @Bean - public Docket createRestApi() { - return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()) - .select() - .apis(RequestHandlerSelectors.basePackage("com.xkcoding.swagger.controller")) - .paths(PathSelectors.any()) - .build(); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder().title("spring-boot-demo") - .description("这是一个简单的 Swagger API 演示") - .contact(new Contact("Yangkai.Shen", "http://xkcoding.com", "237497819@qq.com")) - .version("1.0.0-SNAPSHOT") - .build(); - } - -} -``` - -## UserController.java - -> 主要演示API层的注解。 - -```java -/** - *

- * User Controller - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 11:30 - */ -@RestController -@RequestMapping("/user") -@Api(tags = "1.0.0-SNAPSHOT", description = "用户管理", value = "用户管理") -@Slf4j -public class UserController { - @GetMapping - @ApiOperation(value = "条件查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", dataType = DataType.STRING, paramType = ParamType.QUERY, defaultValue = "xxx")}) - public ApiResponse getByUserName(String username) { - log.info("多个参数用 @ApiImplicitParams"); - return ApiResponse.builder().code(200) - .message("操作成功") - .data(new User(1, username, "JAVA")) - .build(); - } - - @GetMapping("/{id}") - @ApiOperation(value = "主键查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH)}) - public ApiResponse get(@PathVariable Integer id) { - log.info("单个参数用 @ApiImplicitParam"); - return ApiResponse.builder().code(200) - .message("操作成功") - .data(new User(id, "u1", "p1")) - .build(); - } - - @DeleteMapping("/{id}") - @ApiOperation(value = "删除用户(DONE)", notes = "备注") - @ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH) - public void delete(@PathVariable Integer id) { - log.info("单个参数用 ApiImplicitParam"); - } - - @PostMapping - @ApiOperation(value = "添加用户(DONE)") - public User post(@RequestBody User user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PostMapping("/multipar") - @ApiOperation(value = "添加用户(DONE)") - public List multipar(@RequestBody List user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - - return user; - } - - @PostMapping("/array") - @ApiOperation(value = "添加用户(DONE)") - public User[] array(@RequestBody User[] user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PutMapping("/{id}") - @ApiOperation(value = "修改用户(DONE)") - public void put(@PathVariable Long id, @RequestBody User user) { - log.info("如果你不想写 @ApiImplicitParam 那么 swagger 也会使用默认的参数名作为描述信息 "); - } - - @PostMapping("/{id}/file") - @ApiOperation(value = "文件上传(DONE)") - public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) { - log.info(file.getContentType()); - log.info(file.getName()); - log.info(file.getOriginalFilename()); - return file.getOriginalFilename(); - } -} -``` - -## ApiResponse.java - -> 主要演示了 实体类 的注解。 - -```java -/** - *

- * 通用API接口返回 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 11:30 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(value = "通用PI接口返回", description = "Common Api Response") -public class ApiResponse implements Serializable { - private static final long serialVersionUID = -8987146499044811408L; - /** - * 通用返回状态 - */ - @ApiModelProperty(value = "通用返回状态", required = true) - private Integer code; - /** - * 通用返回信息 - */ - @ApiModelProperty(value = "通用返回信息", required = true) - private String message; - /** - * 通用返回数据 - */ - @ApiModelProperty(value = "通用返回数据", required = true) - private T data; -} -``` - -## 参考 - -1. swagger 官方网站:https://swagger.io/ - -2. swagger 官方文档:https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Getting-started - -3. swagger 常用注解:https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations diff --git a/demo-apidoc/demo-apidoc-swagger/pom.xml b/demo-apidoc/demo-apidoc-swagger/pom.xml deleted file mode 100644 index 69e21d8..0000000 --- a/demo-apidoc/demo-apidoc-swagger/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - 4.0.0 - - demo-swagger - 1.0.0-SNAPSHOT - jar - - demo-swagger - Demo project for Spring Boot - - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - - - UTF-8 - UTF-8 - 1.8 - 2.9.2 - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - io.springfox - springfox-swagger2 - ${swagger.version} - - - - io.springfox - springfox-swagger-ui - ${swagger.version} - - - - org.projectlombok - lombok - true - - - - - demo-swagger - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/ApiResponse.java b/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/ApiResponse.java deleted file mode 100644 index fb726cd..0000000 --- a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/ApiResponse.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xkcoding.swagger.common; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - *

- * 通用API接口返回 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 11:30 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(value = "通用PI接口返回", description = "Common Api Response") -public class ApiResponse implements Serializable { - private static final long serialVersionUID = -8987146499044811408L; - /** - * 通用返回状态 - */ - @ApiModelProperty(value = "通用返回状态", required = true) - private Integer code; - /** - * 通用返回信息 - */ - @ApiModelProperty(value = "通用返回信息", required = true) - private String message; - /** - * 通用返回数据 - */ - @ApiModelProperty(value = "通用返回数据", required = true) - private T data; -} diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/DataType.java b/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/DataType.java deleted file mode 100644 index b5266a6..0000000 --- a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/DataType.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xkcoding.swagger.common; - -/** - *

- * 方便在 @ApiImplicitParam 的 dataType 属性使用 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 13:23 - */ -public final class DataType { - - public final static String STRING = "String"; - public final static String INT = "int"; - public final static String LONG = "long"; - public final static String DOUBLE = "double"; - public final static String FLOAT = "float"; - public final static String BYTE = "byte"; - public final static String BOOLEAN = "boolean"; - public final static String ARRAY = "array"; - public final static String BINARY = "binary"; - public final static String DATETIME = "dateTime"; - public final static String PASSWORD = "password"; - -} diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/ParamType.java b/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/ParamType.java deleted file mode 100644 index 775ef6f..0000000 --- a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/common/ParamType.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xkcoding.swagger.common; - -/** - *

- * 方便在 @ApiImplicitParam 的 paramType 属性使用 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 13:24 - */ -public final class ParamType { - - public final static String QUERY = "query"; - public final static String HEADER = "header"; - public final static String PATH = "path"; - public final static String BODY = "body"; - public final static String FORM = "form"; - -} diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/config/Swagger2Config.java b/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/config/Swagger2Config.java deleted file mode 100644 index 6bc94ff..0000000 --- a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/config/Swagger2Config.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.xkcoding.swagger.config; - -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.service.Contact; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -/** - *

- * Swagger2 配置 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 11:14 - */ -@Configuration -@EnableSwagger2 -public class Swagger2Config { - - @Bean - public Docket createRestApi() { - return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.xkcoding.swagger.controller")).paths(PathSelectors.any()).build(); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder().title("spring-boot-demo").description("这是一个简单的 Swagger API 演示").contact(new Contact("Yangkai.Shen", "http://xkcoding.com", "237497819@qq.com")).version("1.0.0-SNAPSHOT").build(); - } - -} diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/controller/UserController.java b/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/controller/UserController.java deleted file mode 100644 index 369f6f7..0000000 --- a/demo-apidoc/demo-apidoc-swagger/src/main/java/com/xkcoding/swagger/controller/UserController.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.xkcoding.swagger.controller; - -import com.xkcoding.swagger.common.ApiResponse; -import com.xkcoding.swagger.common.DataType; -import com.xkcoding.swagger.common.ParamType; -import com.xkcoding.swagger.entity.User; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.util.List; - -/** - *

- * User Controller - *

- * - * @author yangkai.shen - * @date Created in 2018-11-29 11:30 - */ -@RestController -@RequestMapping("/user") -@Api(tags = "1.0.0-SNAPSHOT", description = "用户管理", value = "用户管理") -@Slf4j -public class UserController { - @GetMapping - @ApiOperation(value = "条件查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", dataType = DataType.STRING, paramType = ParamType.QUERY, defaultValue = "xxx")}) - public ApiResponse getByUserName(String username) { - log.info("多个参数用 @ApiImplicitParams"); - return ApiResponse.builder().code(200).message("操作成功").data(new User(1, username, "JAVA")).build(); - } - - @GetMapping("/{id}") - @ApiOperation(value = "主键查询(DONE)", notes = "备注") - @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH)}) - public ApiResponse get(@PathVariable Integer id) { - log.info("单个参数用 @ApiImplicitParam"); - return ApiResponse.builder().code(200).message("操作成功").data(new User(id, "u1", "p1")).build(); - } - - @DeleteMapping("/{id}") - @ApiOperation(value = "删除用户(DONE)", notes = "备注") - @ApiImplicitParam(name = "id", value = "用户编号", dataType = DataType.INT, paramType = ParamType.PATH) - public void delete(@PathVariable Integer id) { - log.info("单个参数用 ApiImplicitParam"); - } - - @PostMapping - @ApiOperation(value = "添加用户(DONE)") - public User post(@RequestBody User user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PostMapping("/multipar") - @ApiOperation(value = "添加用户(DONE)") - public List multipar(@RequestBody List user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - - return user; - } - - @PostMapping("/array") - @ApiOperation(value = "添加用户(DONE)") - public User[] array(@RequestBody User[] user) { - log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam"); - return user; - } - - @PutMapping("/{id}") - @ApiOperation(value = "修改用户(DONE)") - public void put(@PathVariable Long id, @RequestBody User user) { - log.info("如果你不想写 @ApiImplicitParam 那么 swagger 也会使用默认的参数名作为描述信息 "); - } - - @PostMapping("/{id}/file") - @ApiOperation(value = "文件上传(DONE)") - public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) { - log.info(file.getContentType()); - log.info(file.getName()); - log.info(file.getOriginalFilename()); - return file.getOriginalFilename(); - } -} diff --git a/demo-apidoc/demo-apidoc-swagger/src/main/resources/application.yml b/demo-apidoc/demo-apidoc-swagger/src/main/resources/application.yml deleted file mode 100644 index a02fbde..0000000 --- a/demo-apidoc/demo-apidoc-swagger/src/main/resources/application.yml +++ /dev/null @@ -1,4 +0,0 @@ -server: - port: 8080 - servlet: - context-path: /demo \ No newline at end of file diff --git a/demo-apidoc/demo-apidoc-swagger/src/test/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplicationTests.java b/demo-apidoc/demo-apidoc-swagger/src/test/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplicationTests.java deleted file mode 100644 index 45742c4..0000000 --- a/demo-apidoc/demo-apidoc-swagger/src/test/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xkcoding.swagger; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class SpringBootDemoSwaggerApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/demo-apidoc/pom.xml b/demo-apidoc/pom.xml index c770963..d396ef3 100644 --- a/demo-apidoc/pom.xml +++ b/demo-apidoc/pom.xml @@ -18,4 +18,8 @@ 17 + + demo-apidoc-springdoc + +