集成Swagger

基于knife4j集成swagger

集成的步骤

1添加依赖

2配置包扫描

3给每个Controller配置@API

4给每个方法(接口)配置入参、返回值的说明

5针对入参的实体、返回类型VO做配置

添加依赖

 <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
 <version>3.0.3</version>
        </dependency>

配置包扫描

package com.neuedu.mp.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.builders.RequestParameterBuilder;
import springfox.documentation.schema.ScalarType;
import springfox.documentation.service.Contact;
import springfox.documentation.service.ParameterType;
import springfox.documentation.service.RequestParameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author:Kevin
 * @Date:2023/10/29 10:17
 */
@Configuration
public class Knife4jConfig {

    @Bean
    public Docket dockerCommon() {
        return createDocket("com.neuedu.mp.controller", "his管理");
    }

    /**
     * 用于创建不同组的dockert
     *
     * @param basePackage
     * @return
     */
    public Docket createDocket(String basePackage, String groupName) {


        ApiSelectorBuilder builder = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("后台服务接口API文档")
                        //描述字段支持Markdown语法
                        .description("#的后端管理服务端接口")
                        .termsOfServiceUrl("")
                        .contact(new Contact("张金山", "https://jshand.gitee.io/#/", "zhangjinshan21f@163.com"))
                        .version("1.0")
                        .build())//分组名称
                .groupName(groupName)
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                .paths(PathSelectors.any());

        return builder.build().globalRequestParameters(getGlobalRequestParameters());

    }

    //生成全局通用请求头
    private List<RequestParameter> getGlobalRequestParameters() {
        List<RequestParameter> parameters = new ArrayList<>();
        parameters.add(new RequestParameterBuilder()
                .name("Authorization")
                .description("token令牌")
                .required(false)
                .in(ParameterType.HEADER)
                .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)))
                .parameterIndex(0)
                .build());
        return parameters;
    }
}

增加配置 @Api("用户管理") @ApiOperation(value = "用户保存")

package com.neuedu.mp.controller;

import com.neuedu.mp.entity.SysUser;
import com.neuedu.mp.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 用户信息表 前端控制器
 * </p>
 *
 * @author kevin
 * @since 2023-10-29
 */
@RestController
@RequestMapping("/sysUser")
@Slf4j
@Api("用户管理")
public class SysUserController {


   @Autowired
   ISysUserService sysUserService;

   @ApiOperation(value = "用户保存")
   @RequestMapping("/save")
    boolean save(SysUser user){
        System.out.println(user);
        log.debug(user.toString());
       return  sysUserService.save(user);
    }

}

增加@ApiModelProperty("用户名")

package com.neuedu.mp.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 用户信息表
 * </p>
 *
 * @author kevin
 * @since 2023-10-29
 */
@TableName("sys_user")
public class SysUser implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    @TableId(value = "user_id", type = IdType.AUTO)
    private Long userId;

    /**
     * 部门ID
     */
    private Long deptId;

    /**
     * 用户账号
     */
    @ApiModelProperty("用户名")
    private String userName;

    /**
     * 用户昵称
     */
    private String nickName;

    /**
     * 用户类型(00系统用户)
     */
    private String userType;

    /**
     * 用户邮箱
     */
    private String email;

    /**
     * 手机号码
     */
    private String phonenumber;

    /**
     * 用户性别(0男 1女 2未知)
     */
    private String sex;

    /**
     * 头像地址
     */
    private String avatar;

    /**
     * 密码
     */
    private String password;

    /**
     * 帐号状态(0正常 1停用)
     */
    private String status;

    /**
     * 删除标志(0代表存在 2代表删除)
     */
    private String delFlag;

    /**
     * 最后登录IP
     */
    private String loginIp;

    /**
     * 最后登录时间
     */
    private LocalDateTime loginDate;

    /**
     * 创建者
     */
    private String createBy;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新者
     */
    private String updateBy;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 备注
     */
    private String remark;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public Long getDeptId() {
        return deptId;
    }

    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getUserType() {
        return userType;
    }

    public void setUserType(String userType) {
        this.userType = userType;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhonenumber() {
        return phonenumber;
    }

    public void setPhonenumber(String phonenumber) {
        this.phonenumber = phonenumber;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDelFlag() {
        return delFlag;
    }

    public void setDelFlag(String delFlag) {
        this.delFlag = delFlag;
    }

    public String getLoginIp() {
        return loginIp;
    }

    public void setLoginIp(String loginIp) {
        this.loginIp = loginIp;
    }

    public LocalDateTime getLoginDate() {
        return loginDate;
    }

    public void setLoginDate(LocalDateTime loginDate) {
        this.loginDate = loginDate;
    }

    public String getCreateBy() {
        return createBy;
    }

    public void setCreateBy(String createBy) {
        this.createBy = createBy;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    public String getUpdateBy() {
        return updateBy;
    }

    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }

    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    @Override
    public String toString() {
        return "SysUser{" +
            "userId = " + userId +
            ", deptId = " + deptId +
            ", userName = " + userName +
            ", nickName = " + nickName +
            ", userType = " + userType +
            ", email = " + email +
            ", phonenumber = " + phonenumber +
            ", sex = " + sex +
            ", avatar = " + avatar +
            ", password = " + password +
            ", status = " + status +
            ", delFlag = " + delFlag +
            ", loginIp = " + loginIp +
            ", loginDate = " + loginDate +
            ", createBy = " + createBy +
            ", createTime = " + createTime +
            ", updateBy = " + updateBy +
            ", updateTime = " + updateTime +
            ", remark = " + remark +
        "}";
    }
}



http://127.0.0.1:8081/doc.html#/home

<think>好的,我现在需要帮助用户了解如何在项目中集成Swagger UI或API文档生成工具。首先,我要回顾用户提供的引用内容,确保正确使用相关信息。 根据引用[1]和[2],Swagger是一个用于生成RESTful API文档的工具,能自动生成交互式文档,方便测试。用户提到Spring Boot项目,所以重点应该放在Spring Boot集成Swagger的步骤上。引用[3]和[4]提到了添加依赖和可能遇到的错误,比如依赖冲突或启动问题,这些需要注意。 首先,步骤应该是添加依赖。引用[1]和[4]都提到需要添加Swagger的依赖。在Spring Boot中,通常使用Springfox Swagger,但要注意版本兼容性。例如,Spring Boot 2.6.x及以上可能需要使用更高的Swagger版本,或者调整路径匹配策略,避免启动错误。引用[3]中的错误可能是由于Guava版本冲突引起的,所以需要确认依赖是否正确。 接下来是配置Swagger。用户需要创建一个配置类,使用@EnableSwagger2注解,并定义Docket bean来配置API的基本信息。引用[4]提到了文档分组和实体模型描述,这部分可能需要更详细的配置,比如设置API的包路径、作者信息等。 然后是访问Swagger UI。根据引用[3],生成的文档可以通过/swagger-ui.html访问,但有时候路径可能会有变化,需要提醒用户检查是否正确启用了Swagger。 此外,引用[4]还提到了常见问题,比如依赖失败或启动错误。需要指导用户如何解决这些问题,例如检查依赖版本,排除冲突,或者调整配置。例如,如果遇到Failed to start bean的错误,可能需要添加路径匹配策略的配置。 最后,生成相关问题,可能涉及依赖冲突解决、配置细节、错误处理等。确保问题覆盖用户可能遇到的后续疑问。 总结步骤: 1. 添加正确的Maven依赖,注意版本兼容性。 2. 创建Swagger配置类,启用并配置API信息。 3. 处理可能的依赖冲突或配置问题。 4. 测试访问Swagger UI,确认文档生成成功。 5. 提供常见问题解决方法。 现在需要将这些步骤结构化,用清晰的中文回答,并引用相关引用内容作为支持。同时,生成相关问题,帮助用户进一步了解集成过程中的其他方面。</think>### 如何在项目中集成 Swagger #### 步骤 1:添加依赖 在 Spring Boot 项目的 `pom.xml` 中添加以下依赖(需注意版本兼容性): ```xml <!-- Springfox Swagger 核心依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- Swagger UI 界面依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> ``` 若项目使用 Spring Boot 2.6+,可能需额外添加路径匹配配置以避免启动错误[^3][^4]。 --- #### 步骤 2:配置 Swagger 创建配置类 `SwaggerConfig.java`: ```java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) // 指定扫描的包 .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API 文档") .description("接口详细说明") .version("1.0") .contact(new Contact("作者", "https://example.com", "[email protected]")) .build(); } } ``` 此配置会扫描指定包下的 Controller 并生成文档[^1]。 --- #### 步骤 3:访问 Swagger UI 启动项目后,通过以下 URL 访问交互式文档界面: ``` http://localhost:8080/swagger-ui.html ``` 若路径冲突或版本问题导致无法访问,可检查控制台日志或调整配置。 --- #### 常见问题处理 1. **依赖冲突**:若启动报错 `NoSuchMethodError`,可能是 Guava 版本冲突,需排除旧版本依赖。 2. **路径匹配问题**:Spring Boot 2.6+ 需在 `application.properties` 中添加: ```properties spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER ``` 3. **文档分组**:通过定义多个 `Docket` Bean 实现不同模块的文档分离。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值