目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

Springboot2.x整合Swagger3.X

引入依赖

  1<?xml version="1.0" encoding="UTF-8"?>
  2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4	<modelVersion>4.0.0</modelVersion>
  5	<parent>
  6		<groupId>org.springframework.boot</groupId>
  7		<artifactId>spring-boot-starter-parent</artifactId>
  8		<version>2.4.1</version>
  9		<relativePath/> <!-- lookup parent from repository -->
 10	</parent>
 11	<groupId>net.xdclass</groupId>
 12	<artifactId>1024shop-manager</artifactId>
 13	<version>0.0.1-SNAPSHOT</version>
 14	<name>1024shop-manager</name>
 15	<description>Demo project for Spring Boot</description>
 16
 17	<properties>
 18		<java.version>11</java.version>
 19	</properties>
 20
 21	<dependencies>
 22		<dependency>
 23			<groupId>org.springframework.boot</groupId>
 24			<artifactId>spring-boot-starter-web</artifactId>
 25		</dependency>
 26
 27		<dependency>
 28			<groupId>org.springframework.boot</groupId>
 29			<artifactId>spring-boot-starter-test</artifactId>
 30			<scope>test</scope>
 31		</dependency>
 32
 33
 34
 35
 36		<dependency>
 37			<groupId>org.projectlombok</groupId>
 38			<artifactId>lombok</artifactId>
 39			<version>1.18.16</version>
 40			<scope>provided</scope>
 41		</dependency>
 42
 43
 44		<dependency>
 45			<groupId>mysql</groupId>
 46			<artifactId>mysql-connector-java</artifactId>
 47		</dependency>
 48
 49		<!--mybatis plus和springboot整合-->
 50		<dependency>
 51			<groupId>com.baomidou</groupId>
 52			<artifactId>mybatis-plus-boot-starter</artifactId>
 53			<version>3.4.1</version>
 54		</dependency>
 55
 56
 57
 58		<!-- 代码自动生成依赖 begin -->
 59		<dependency>
 60			<groupId>com.baomidou</groupId>
 61			<artifactId>mybatis-plus-generator</artifactId>
 62			<version>3.4.1</version>
 63		</dependency>
 64		<!-- velocity -->
 65		<dependency>
 66			<groupId>org.apache.velocity</groupId>
 67			<artifactId>velocity-engine-core</artifactId>
 68			<version>2.0</version>
 69		</dependency>
 70		<!-- 代码自动生成依赖 end-->
 71
 72
 73		<!--接口文档自动生成-->
 74		<dependency>
 75			<groupId>io.springfox</groupId>
 76			<artifactId>springfox-boot-starter</artifactId>
 77			<version>3.0.0</version>
 78		</dependency>
 79
 80
 81
 82	</dependencies>
 83
 84	<build>
 85		<plugins>
 86			<plugin>
 87				<groupId>org.springframework.boot</groupId>
 88				<artifactId>spring-boot-maven-plugin</artifactId>
 89			</plugin>
 90			<plugin>
 91				<groupId>org.apache.maven.plugins</groupId>
 92				<artifactId>maven-compiler-plugin</artifactId>
 93				<configuration>
 94					<source>15</source>
 95					<target>15</target>
 96				</configuration>
 97			</plugin>
 98		</plugins>
 99	</build>
100
101
102	<!-- 代码库 -->
103	<repositories>
104		<repository>
105			<id>maven-ali</id>
106			<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
107			<releases>
108				<enabled>true</enabled>
109			</releases>
110			<snapshots>
111				<enabled>true</enabled>
112				<updatePolicy>always</updatePolicy>
113				<checksumPolicy>fail</checksumPolicy>
114			</snapshots>
115		</repository>
116	</repositories>
117
118	<pluginRepositories>
119		<pluginRepository>
120			<id>public</id>
121			<name>aliyun nexus</name>
122			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
123			<releases>
124				<enabled>true</enabled>
125			</releases>
126			<snapshots>
127				<enabled>false</enabled>
128			</snapshots>
129		</pluginRepository>
130	</pluginRepositories>
131
132
133
134</project>
135

application.properties

 1
 2server.port=8081
 3#==============================数据库相关配置========================================
 4spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 5spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xd_shop?useUnicode=true&characterEncoding=utf-8&useSSL=false
 6spring.datasource.username =root
 7spring.datasource.password =xdclass.net
 8
 9
10#配置mybatis plus打印sql日志
11mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
12
13#xml文件路径
14mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml
15
16#配置最新全局配置文件!!!!
17#mybatis-plus.config-location = classpath:mybatis-config.xml
18
19#配置mybatis包路径
20mybatis-plus.type-aliases-package=net.xdclass.shopmanager.model
21
22#mybatis plus下划线转驼峰配置,默认就是true
23mybatis-plus.configuration.map-underscore-to-camel-case=true
24
25#配置全局默认主键类型,实体类就不用加 @TableId(value = "id", type = IdType.AUTO)
26mybatis-plus.global-config.db-config.id-type=auto
27
28
29#删除是1
30mybatis-plus.global-config.db-config.logic-delete-value=1
31
32#未删除是0
33mybatis-plus.global-config.db-config.logic-not-delete-value=0
34
35#如果java实体类没加注解@TableLogic,则可以配置这个,推荐这里配置
36mybatis-plus.global-config.db-config.logic-delete-field=deleted
37
38
39
40
41#spring.application.name=小滴课堂1024shop接口,增加中文会乱码,可以修改文件编码,或者使用yml格式
42spring.application.name=1024shop
43
44# ===== 自定义swagger配置 ===== #
45swagger.enable=true
46swagger.application-name= ${spring.application.name}
47swagger.application-version=1.0
48#swagger.application-description=1024shop电商平台管理后端接口文档
49swagger.application-description=1024shop api info 

配置类

SwaggerConfiguration

src/main/java/net/xdclass/shopmanager/config/SwaggerConfiguration.java

 1package net.xdclass.shopmanager.config;
 2
 3import io.swagger.annotations.ApiOperation;
 4import lombok.Data;
 5import org.springframework.boot.context.properties.ConfigurationProperties;
 6import org.springframework.context.annotation.Bean;
 7import org.springframework.stereotype.Component;
 8import springfox.documentation.builders.ApiInfoBuilder;
 9import springfox.documentation.builders.PathSelectors;
10import springfox.documentation.builders.RequestHandlerSelectors;
11import springfox.documentation.oas.annotations.EnableOpenApi;
12import springfox.documentation.service.ApiInfo;
13import springfox.documentation.service.Contact;
14import springfox.documentation.spi.DocumentationType;
15import springfox.documentation.spring.web.plugins.Docket;
16
17/**
18 * 小滴课堂,愿景:让技术不再难学
19 *
20 * @Description
21 * @Author 二当家小D
22 * @Remark 有问题直接联系我,源码-笔记-技术交流群
23 * @Version 1.0
24 **/
25
26@Component
27@Data
28@ConfigurationProperties("swagger")
29@EnableOpenApi
30public class SwaggerConfiguration {
31
32
33    /**
34     * 是否开启swagger,生产环境一般关闭,所以这里定义一个变量
35     */
36    private Boolean enable;
37
38    /**
39     * 项目应用名
40     */
41    private String applicationName;
42
43    /**
44     * 项目版本信息
45     */
46    private String applicationVersion;
47
48    /**
49     * 项目描述信息
50     */
51    private String applicationDescription;
52
53
54    @Bean
55    public Docket docket(){
56
57
58        return new Docket(DocumentationType.OAS_30)
59
60                .pathMapping("/")
61
62                // 定义是否开启swagger,false为关闭,可以通过变量控制,线上关闭
63                .enable(enable)
64
65                //配置api文档元信息
66                .apiInfo(apiInfo())
67
68                // 选择哪些接口作为swagger的doc发布
69                .select()
70
71
72                //apis() 控制哪些接口暴露给swagger,
73                // RequestHandlerSelectors.any() 所有都暴露
74                // RequestHandlerSelectors.basePackage("net.xdclass.*")  指定包位置
75                // withMethodAnnotation(ApiOperation.class)标记有这个注解 ApiOperation
76                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
77
78                .paths(PathSelectors.any())
79
80                .build();
81
82    }
83
84
85    private ApiInfo apiInfo() {
86        return new ApiInfoBuilder()
87                .title(applicationName)
88                .description(applicationDescription)
89                .contact(new Contact("小滴课堂-二当家小D", "https://xdclass.net", "794666918@qq.com"))
90                .version(applicationVersion)
91                .build();
92    }
93
94
95}
96

访问

1http://localhost:8081/swagger-ui/index.html

常用注解

 1package net.xdclass.shopmanager.controller;
 2
 3import io.swagger.annotations.Api;
 4import io.swagger.annotations.ApiOperation;
 5import io.swagger.annotations.ApiParam;
 6import net.xdclass.shopmanager.model.User;
 7import net.xdclass.shopmanager.util.JsonData;
 8import org.springframework.web.bind.annotation.*;
 9import springfox.documentation.annotations.ApiIgnore;
10import springfox.documentation.spring.web.json.Json;
11
12import java.util.ArrayList;
13import java.util.List;
14
15/**
16 * 小滴课堂,愿景:让技术不再难学
17 *
18 * @Description
19 * @Author 二当家小D
20 * @Remark 有问题直接联系我,源码-笔记-技术交流群
21 * @Version 1.0
22 **/
23
24@RestController
25@RequestMapping("/api/v1/user")
26@Api(tags = "用户模块",value = "用户controller")
27public class UserController {
28
29    @ApiOperation("用户列表")
30    //@RequestMapping("list")
31    @GetMapping("list")
32    public JsonData list(){
33
34        User user1 = User.builder().phone("13113772121").id(1).email("794666918@qq.com").build();
35        User user2 = User.builder().phone("2343232").id(2).email("79466691811@qq.com").build();
36        List list = new ArrayList();
37        list.add(user1);
38        list.add(user2);
39        return JsonData.buildSuccess(list);
40    }
41
42    @ApiOperation("查看用户详情")
43    @GetMapping("detail")
44    public JsonData query(@ApiParam(name = "id",value = "用户id",example = "1")
45                                      @RequestParam("id") int id){
46        return JsonData.buildSuccess();
47    }
48
49    @ApiOperation("用户登录")
50    @PostMapping("login")
51    public JsonData login(
52            @ApiParam(name = "phone", value = "手机号",example = "13888888888")
53
54            @RequestParam("phone") String phone,
55
56            @ApiParam(name = "pwd", value = "密码",example = "123456")
57            @RequestParam("pwd")String pwd){
58
59        return JsonData.buildSuccess();
60    }
61
62    @ApiIgnore
63    @ApiOperation("根据id删除用户")
64    @DeleteMapping("/delete/{id}")
65    public JsonData delById(
66            @ApiParam(name = "id",value = "用户id",example = "1")
67
68            @PathVariable int id){
69
70        return JsonData.buildSuccess();
71    }
72
73}
74

APiModel 和 ApiModelProperty 对象注解

  • @ApiModel()
    • 用于类 表示对类进行说明,用于参数用实体类接收,value–表示对象名,description–描述
    • 这种一般用在 post 创建的时候,使用对象提交这样的场景
  • @ApiModelProperty()
    • 用于方法,字段; 表示对 model 属性的说明或者数据操作更改
    • value–字段说明
    • name–重写属性名字
    • dataType–重写属性类型
    • required–是否必填
    • example–举例说明
    • hidden–隐藏
 1package net.xdclass.shopmanager.request;
 2
 3import io.swagger.annotations.ApiModel;
 4import io.swagger.annotations.ApiModelProperty;
 5import lombok.Data;
 6
 7@ApiModel(value = "新增用户请求模型")
 8@Data
 9public class SaveUserRequest {
10
11    @ApiModelProperty(value = "主键")
12    private int id;
13
14    @ApiModelProperty(value = "邮箱",required = true,example = "794666918@qq.com")
15    private String email;
16
17    @ApiModelProperty(value = "手机号",required = false)
18    private String phone;
19
20    private  String name;
21
22}
23

controller

 1@RestController
 2@RequestMapping("/api/v1/user")
 3@Api(tags = "用户模块",value = "用户controller")
 4public class UserController {
 5 
 6    @ApiOperation("新增用户")
 7    @PostMapping("save")
 8    //public JsonData save(SaveUserRequest userRequest){
 9    public JsonData save(@RequestBody SaveUserRequest userRequest){
10
11        return JsonData.buildSuccess();
12    }
13}
14

ApiResponse 描述接口响应

 1    @ApiOperation("用户登录")
 2    @PostMapping("login")
 3    @ApiResponses({
 4            @ApiResponse(responseCode = HttpCodeStatus.REDIRECT, description = "重定向,跳转登录"),
 5            @ApiResponse(responseCode = "403",description = "没权限"),
 6    })
 7    public JsonData login(
 8            @ApiParam(name = "phone", value = "手机号",example = "13888888888")
 9
10            @RequestParam("phone") String phone,
11
12            @ApiParam(name = "pwd", value = "密码",example = "123456")
13            @RequestParam("pwd")String pwd){
14
15        return JsonData.buildSuccess();
16    }
17

作者:Soulboy