系列文章目录
文章目录
前言
本文我们要讲述:
Swagger
在下攸攸太上,我们星球的毁灭原因如今依然未知。
一、Swagger介绍
Swagger是一个强大的工具,用于生成和维护在线接口说明文档。通过在代码中使用注解,Swagger可以自动生成详细的API文档,并且随着代码的修改,文档也会同步更新。这大大简化了前后端联调的过程,提高了开发效率。
二、Swagger代码实现
1. 创建Maven项目
项目结构:
2. 添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.7.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
<jwt.version>0.7.0</jwt.version>
<fastjson.version>1.2.60</fastjson.version>
<spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--json-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
3. 创建SwaggerConfig配置类
package com.jjy.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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* @author alen
* @date 2024/10/6 9:56:34
*/
@Configuration
public class SwaggerConfig {
@Bean
public Docket docket() {
/*采用swagger2版本*/
return new Docket(DocumentationType.SWAGGER_2)
/*生成api相关信息*/
.apiInfo(createApiInfo())
/*返回一个apiSelectorBuilder对象,用来控制接口生成在线文档*/
.select()
/*扫描某个包下的接口*/
.apis(RequestHandlerSelectors.basePackage("com.jjy.controller"))
/*生成所有的api*/
.paths(PathSelectors.any())
.build();
}
/**
* 创建api相关信息
*
* @return ApiInfo
*/
private ApiInfo createApiInfo() {
return new ApiInfoBuilder()
/*自定义title*/
.title("swagger demo")
/*描述*/
.description("swagger示例")
/*定义服务域名*/
.termsOfServiceUrl("")
/*自定义版本号*/
.version("0.0.1")
.build();
}
}
4. 创建UserUpdateDto实体类
package com.jjy.entry;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel
public class UserUpdateDto {
@ApiModelProperty(value = "主键", required = true, example = "asdfa54s56d")
private String id;
@ApiModelProperty(value = "名字", required = true, example = "张三")
private String name;
@ApiModelProperty(value = "密码", required = true, example = "123456")
private String password;
@ApiModelProperty(value = "年龄", required = true, example = "20")
private Integer age;
@ApiModelProperty(value = "生日", required = true, example = "1998-07-07")
private Date birthday;
@ApiModelProperty(value = "分数", example = "100.5")
private Double score;
}
/*
value 描述
required 必填项
example 举例
*/
5. 创建UserAddDto实体类
package com.jjy.entry;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel
public class UserAddDto {
@ApiModelProperty(value = "名字", required = true, example = "张三")
private String name;
@ApiModelProperty(value = "密码", required = true, example = "123456")
private String password;
@ApiModelProperty(value = "年龄", required = true, example = "20")
private Integer age;
@ApiModelProperty(value = "生日", required = true, example = "1998-07-07")
private Date birthday;
@ApiModelProperty(value = "分数", example = "100.5")
private Double score;
}
6. 创建ResultCode工具类
package com.jjy.util;
public enum ResultCode {
SUCCESS(0, "请求成功"),
ERROR(1, "请求失败"),
;
private int code;
private String message;
ResultCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
7. 创建Result工具类
package com.jjy.util;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class Result {
private Integer code;
private String message;
private Map<String, Object> map = new HashMap<>();
private Result() {
}
public static Result ok() {
Result r = new Result();
r.setCode(ResultCode.SUCCESS.getCode());
r.setMessage(ResultCode.SUCCESS.getMessage());
return r;
}
public static Result error() {
Result r = new Result();
r.setCode(ResultCode.ERROR.getCode());
r.setMessage(ResultCode.ERROR.getMessage());
return r;
}
public Result put(String key, Object value) {
map.put(key, value);
return this;
}
public Object get(String key) {
return map.get(key);
}
}
8. 创建UserController控制器
package com.jjy.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import com.jjy.entry.UserAddDto;
import com.jjy.entry.UserUpdateDto;
import com.jjy.util.Result;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map;
@Api(tags = "用户")
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping
@ApiOperation("用户新增")
public Result add(@RequestBody UserAddDto dto) {
return Result.ok();
}
@DeleteMapping("/{id}")
@ApiOperation("用户删除")
@ApiImplicitParams({
@ApiImplicitParam(value = "删除的用户主键", name = "id", paramType = "path")
})
public Result delete(@PathVariable String id) {
return Result.ok();
}
@PutMapping
@ApiOperation("用户修改")
public Result update(@RequestBody UserUpdateDto dto) {
return Result.ok();
}
@GetMapping("/{id}")
@ApiOperation("用户详情")
@ApiImplicitParams({
@ApiImplicitParam(value = "用户主键", paramType = "path") //path是指地址传参。
})
public Result info(@PathVariable String id) {
return Result.ok();
}
@GetMapping
@ApiOperation("用户查询")
@ApiImplicitParams({
@ApiImplicitParam(value = "姓名", name = "name", paramType = "query"),
@ApiImplicitParam(value = "年龄", name = "age", paramType = "query"),
@ApiImplicitParam(value = "分数", name = "score", paramType = "query") // get地址栏传参
})
public Result query(@ApiIgnore @RequestParam Map<String, String> params) {
return Result.ok();
}
}
9. 创建SpringBootMain启动类
package com.jjy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@EnableRedisHttpSession
@EnableSwagger2
public class SpringBootMain {
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class,args);
}
}
10. 创建application.properties配置文件
spring.application.name=241006_Swagger
11. 创建application.yml配置文件
server:
port: 9999
spring:
session:
store-type: redis
12. 创建bootstrap.yml配置文件
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.43.143:8848
config:
server-addr: 192.168.43.143:8848
file-extension: yaml
namespace: 7e56a725-f51a-4603-b421-49add0ae9c4b
shared-configs:
- data-id: redissession1.yaml
group: DEFAULT_GROUP
inetutils:
preferred-networks: 192.168.56
13. 启动项目
访问网址http://localhost:9999/swagger-ui.html
总结
本文讲述了:
Swagger:在线帮助文档
在下攸攸太上,我有点想家了。