springboot 中配置Swagger及其扩展

本文详细介绍如何在Spring Boot项目中集成Swagger2实现API文档自动生成。包括添加依赖、配置类编写、实体类参数描述及Controller层注解使用等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引入依赖

 
        <!--swagger2 依赖-->
        <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>

 

 

2.创建swagger配置类

如图:

 

配置类代码(复制即可):

 
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
import java.util.ArrayList;
import java.util.List;
 
@Configuration
@EnableSwagger2
public class SwaggerConfig {
 
    private String title = "项目标题";
 
    private String description = "项目标题-描述";
 
    private String version = "项目版本";
    
    private String basePackage = "xyz.ark.backstage_12.controller";
 
    //控制swagger是否启动开发模式 测试模式 生产模式
    @Value("${swagger2.enable}")
    private boolean enable;
 
    //指定是否需要给所有接口添加头部信息
    private boolean header = false;
 
    @Bean
    public Docket createRestApi() {
        List<Parameter> pars = header == true ? addParameters() : null;
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(pars)
                .enable(enable);
    }
 
    /**
     * 为swagger接口的时候添加头部信息
     * 如何有多个头部信息 可以add()直接添加到pars就可以了
     *
     * @return
     */
    private List<Parameter> addParameters() {
        List<Parameter> pars = new ArrayList<Parameter>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("token").description("(模拟token传入)非必填 header").modelRef(new ModelRef("string")).parameterType("header").required(false);
 
        //添加一个tokne 用于认证用户本读是否存在token
        pars.add(tokenPar.build());
        return pars;
    }
 
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(title)
                .description(description)
                .termsOfServiceUrl("")
                .version(version)
                .build();
    }
}

 

 

3.给实体类上面添加参数描述

@ApiModelProperty(value = "用户ID")
value参数:用来指定参数描述

如图:

 

 

4.controller层添加如下注解描述即可

如图:

上图代码:

package xyz.ark.backstage_12.controller;
 
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import xyz.ark.backstage_12.entity.Result;
import xyz.ark.backstage_12.entity.User;
import xyz.ark.backstage_12.service.UserService;
 
import java.util.List;
 
@RestController
@Api(tags = "用户操作模块")
public class UserController {
 
    @Autowired
    UserService userService;
 
    @GetMapping("/users")
    @ApiOperation(value = "获取所有用户的信息")
    public Result selectUser() {
        List<User> user = userService.selectUsers();
        return user.size() > 0 ? Result.ok(user) : Result.ok("数据库无数据");
    }
 
    @GetMapping("/user/{id}")
    @ApiOperation(value = "根据用户ID获取用户的信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization" , value = "认证Tonken" , required = true , dataType = "string" , paramType = "header"),
            @ApiImplicitParam(name = "id" , value = "用户id" ,dataType = "string" , required = true , paramType = "query")
    })
    public Result selectUserById(@PathVariable("id") int id) {
        User user = userService.selectUserById(id);
        return Result.ok(user);
    }
 
    @PutMapping("/user")
    @ApiOperation(value = "根据用户ID修改用户信息")
    public Result updataUserById( User user) {
        int i = userService.updateUserById(user);
        return i > 0 ? Result.ok("更新成功") : Result.ok("更新失败");
    }
 
    @PostMapping("/user")
    @ApiOperation(value = "添加新的用户")
    public Result installUser(User user) {
        int i = userService.installUser(user);
        if (i > 0) {
            return Result.ok("添加成功");
        }
        return Result.ok("添加失败");
    }
 
    @DeleteMapping("/user/{id}")
    @ApiOperation(value = "根据用户ID删除用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization" , value = "认证Tonken" , required = true , dataType = "string" , paramType = "header"),
            @ApiImplicitParam(name = "用户ID" , value = "用户id" ,dataType = "string" , required = true , paramType = "query")
    })
    public Result deleteUserById(@PathVariable("id") int id) {
        int i = userService.deleteUserById(id);
        return i > 0 ? Result.ok("删除成功") : Result.ok("删除失败");
    }
}

 

操作完成后 访问   http://localhost:8080/swagger-ui.html

 

4.swagger扩展文档

 

 

 

 

想要将第二个swagger-ui页面变成 图一的效果 只需要在 , pom文件中 swagger的两个依赖之后 在添加一个 如下两个依赖即可

 
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-bean-validators</artifactId>
            <version>2.9.2</version>
        </dependency>

 

此时你的项目可以访问 http://localhost:8080/doc.html 即可看到图一效果,http://localhost:8080/swagger-ui.html可访问图二效果。

其他配置不变。

 

此时 只需要 在 当前的pom文件中添加两个依赖即可。

### 如何在 Spring Boot 中通过 Swagger 定义 API 接口的顺序规范 在 Spring Boot 项目中集成 Swagger 并定义 API 接口时,为了使生成的文档更加清晰易读,通常会关注接口及其参数的显示顺序。以下是关于如何实现最佳实践的内容: #### 1. 使用 `@Api` 和 `@ApiOperation` 控制分组与排序 Swagger 提供了多种注解用于组织和管理 API 文档内容。可以通过 `@Api` 注解指定控制器级别的描述信息,并利用 `@ApiOperation` 来标注具体的方法行为[^3]。 对于接口的顺序安排,可以借助 `value` 或者 `notes` 属性中的元数据进行逻辑上的分类。更重要的是,在某些版本中支持设置 `position` 参数来显式声明操作之间的相对位置关系: ```java @ApiOperation(value = "获取用户详情", notes = "根据ID查询单个用户的详细资料.", position = 1) public ResponseEntity<User> getUserById(@PathVariable Long id) { ... } ``` #### 2. 自定义 Docket 实现全局配置 如果希望在整个应用范围内统一调整展示规则,则可通过扩展 `Docket` 类来自定义插件实例完成更复杂的定制需求[^2]。例如按照路径前缀划分不同模块下的资源集合;或者基于标签机制重新编排各部分结构布局等。 下面是一个简单的例子演示如何创建多个独立分组并将它们关联到各自的包扫描范围上: ```java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket userApis() { return new Docket(DocumentationType.SWAGGER_2) .groupName("users") // 设置分组名称 .select() .apis(RequestHandlerSelectors.basePackage("com.example.users")) .paths(PathSelectors.ant("/api/users/**")) // 过滤特定URL模式 .build(); } @Bean public Docket ordersApis() { return new Docket(DocumentationType.SWAGGER_2) .groupName("orders") .select() .apis(RequestHandlerSelectors.basePackage("com.example.orders")) .paths(PathSelectors.regex("/api/orders/.*")) .build(); } } ``` #### 3. 考虑安全性因素的影响 当涉及到敏感功能点暴露给外部调用方查看时,还需要注意保护措施是否得当[^4]。比如仅允许已登录状态下的管理员角色访问内部管理系统相关的 RESTful Service 列表项等等。 综上所述,合理规划好每一步骤有助于提升最终呈现效果的质量水平。除了上述提到的技术手段外,实际开发过程中也应遵循团队内部既定编码风格指南以保持一致性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值