微服务系列之SpringBoot基础:集成knife4j文档组件

SpringBoot集成knife4j文档组件


前言

在实际项目开发中,基本都是采用前后端分离开发,需要由前后端共同定义接口,编写接口文档,之后根据接口文档进行开发,且需要经常人工维护。在线接口文档使得项目开发过程中前后端工程师有一个统一的文档进行沟通交流,项目维护中人员更迭,都能及时的方便项目人员查看、维护。


一、引入 maven 依赖

 <!--api wiki文档组件-->
 <dependency>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>knife4j-spring-boot-starter</artifactId>
      <version>3.0.2</version>
 </dependency>

二、配置类、Controller和JavaBean类

@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {

    @Bean
    public Docket defaultAllApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfoWebBack())
                .select()
                .apis(requestHandler -> requestHandler.isAnnotatedWith(ApiOperation.class))  //注解写法
                .paths(PathSelectors.any())
                .build()
                .globalRequestParameters(getDefaultParameterList());//可选
    }
    /**
     * admin 分组
     *
     * @return
     */
    @Bean(value = "adminApi")
    public Docket adminApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("后台API分组")
                .apiInfo(apiInfoWebBack())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.swagger.admin")) //平常写法
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfoWebBack() {
        Contact contact = new Contact("huanghong", "", "xdhong@qq.com");
        return new ApiInfoBuilder()
                .title("xxx-api接口")
                .description(C.codeStr)
                .contact(contact)
                .version("1.0")
                .build();
    }

    private List<RequestParameter> getDefaultParameterList() {
        List<RequestParameter> parameterList = new ArrayList<>();
        RequestParameterBuilder appkeyBuilder = new RequestParameterBuilder();
        appkeyBuilder.name(C.API_HEADER_PARAM_APPKEY)
                .query(q -> q.defaultValue("1").model(modelSpecificationBuilder -> modelSpecificationBuilder.scalarModel(ScalarType.STRING)))
                .description("appkey")
                .in("header")
                .required(true)
                .build();
        parameterList.add(appkeyBuilder.build());

        RequestParameterBuilder timestampBuilder = new RequestParameterBuilder();
        timestampBuilder.name(C.API_HEADER_PARAM_TIMESTAMP)
                .query(q -> q.defaultValue("111111111111").model(modelSpecificationBuilder -> modelSpecificationBuilder.scalarModel(ScalarType.STRING)))
                .description("timestamp")
                .in("header")
                .required(true)
                .build();
        parameterList.add(timestampBuilder.build());

        RequestParameterBuilder signBuilder = new RequestParameterBuilder();
        signBuilder.name(C.API_HEADER_PARAM_SIGN)
                .query(q -> q.defaultValue("1").model(modelSpecificationBuilder -> modelSpecificationBuilder.scalarModel(ScalarType.STRING)))
                .description("sign")
                .in("header")
                .required(true)
                .build();
        parameterList.add(signBuilder.build());

        RequestParameterBuilder sessionBuilder = new RequestParameterBuilder();
        sessionBuilder.name(C.API_HEADER_PARAM_SESSION)
                .query(q -> q.defaultValue("111111111111111111111111111111111").model(modelSpecificationBuilder -> modelSpecificationBuilder.scalarModel(ScalarType.STRING)))
                .description("session")
                .in("header")
                .required(true)
                .build();
        parameterList.add(sessionBuilder.build());

        return parameterList;
    }
}
@RestController
@Api(value = "接口名称", tags = "说明")
@RequestMapping("/api/v1")
@Slf4j
@RefreshScope
public class PassController {
 
    @GetMapping(value = "/list")
    @ApiOperation("列表页面")
    public TResult<PageObject<FjPassHeadVO>> list(
            @ApiParam(required = false, value = "组织id") @RequestParam(required = false) String phidOrg,
            @ApiParam(required = false, value = "项目id") @RequestParam(required = false) String phidProject,
            @ApiParam(required = false, value = "分公司id") @RequestParam(required = false) String phidArea,
            @ApiParam(required = false, value = "单据开始日期") @RequestParam(required = false) String checkStartTime,
            @ApiParam(required = false, value = "单据截止日期") @RequestParam(required = false) String checkEndTime,
            @ApiParam(required = true, value = "当前页码") @RequestParam(required = true) Integer page,
            @ApiParam(required = true, value = "每页条数") @RequestParam(required = true) Integer size,
            HttpServletRequest request) throws ParseException {
         }
    }
@ApiModel("单据表头")
@Data
public class PassHeadVO implements Serializable {

    @ApiModelProperty(value="主键id-修改必传")
    private String phid;
    
    @ApiModelProperty(value="单据编码")
    private String billcode;    
    
    @ApiModelProperty(value="单据日期",required = true)
    @NotNull(message = "单据日期不能为空")
    private Date billdate;
    
    @ApiModelProperty(value="申请人id",required = true)
    @NotBlank(message = "申请人id不能为空")
    private String phidApplyman;
}

三、界面效果

swagger 默认访问地址是:http://{host}:{port}/doc.html
在这里插入图片描述

四、主要注解说明

(一)@Api
表示这个类是Swagger的资源,该注解会被Swagger扫描到,该注解可以自定义显示的导航栏标签的名称tag;

(二)@ApiOperation
用在方法上,说明方法的作用
@ApiOperation注解中的tags属性做更细粒度的接口分类定义,该注解可以用于多个不同的controller的分组(即在另外的controller中定义的接口方法是可以分属到其他的接口tag下);

(三)@ApiIgnore
忽略掉指定的接口和类,在开发中肯定存在一些用于跳转路由的controller,那么其实这部分是不需要把接口呈现给其他开发人员的,所以就可以通过@ApiIgnore注解忽略掉该注解;

(四)@ApiParam
以作用在接口方法上面,以及接口方法中的参数位置的注解,其主要是用来给接口中的参数定义相关参数说明,主要是为了,帮助相关人员理解接口中每个参数的含义;

(五)@ApiModel
ApiModel 注解是作用在接口相关实体类上的注解,用来对该接口相关实体类添加额外的描述信息,常常和 @ApiModelProperty 注解配合使用;

(六)@ApiModelProperty
ApiModelProperty 注解是作用在接口相关实体类的参数上的注解,用来对具体的接口相关实体类中的参数添加额外的描述信息,常常和 @ApiModel 注解关联使用;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Knife4j 是一个基于 Swagger 的 API 开发工具,可以帮助开发者快速构建和管理 RESTful API。要集成 Knife4jSpringBoot 项目中,可以参考以下步骤: 1. 在 pom.xml 文件中添加 Knife4j 依赖; 2. 配置 Knife4j 的扫描路径; 3. 配置 Knife4j 的 UI 配置; 4. 配置 Knife4j 的全局配置; 5. 启动 SpringBoot 项目,访问 Knife4j UI。 ### 回答2: 要将Knife4j集成Spring Boot项目中,需要进行以下步骤: 第一步是在项目的pom.xml文件中添加Knife4j的依赖项。可以通过在dependencies标签内添加以下代码来实现: ``` <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.8</version> </dependency> ``` 第二步是在Spring Boot的配置类中添加@EnableSwagger2Doc注解来启用Knife4j: ``` @Configuration @EnableSwagger2Doc public class SwaggerConfig { // 可以在这里进行一些其他的Swagger配置 } ``` 第三步是配置Swagger的基本信息,例如标题、描述等。在application.properties文件中添加以下配置: ``` knife4j.title=API接口文档 knife4j.description=这是一个使用Knife4j生成的接口文档 knife4j.version=1.0 ``` 第四步是在项目启动后,访问http://localhost:8080/doc.html(假设项目运行在localhost的8080端口)来查看Knife4j生成的接口文档页面。 集成完成后,可以在项目中使用一些注解来对接口进行描述、分组、授权等操作。例如,可以使用@Api注解来描述一个接口的基本信息,使用@ApiOperation注解来描述接口的操作等。 以上是将Knife4j集成Spring Boot项目中的基本步骤。集成成功后,可以方便地生成和查看项目的接口文档,提高了API的可维护性和可读性。 ### 回答3: Spring Boot是一个开源的Java框架,可以用于快速构建基于Spring的应用程序。Knife4j是一个基于Swagger的API接口文档生成工具,可以方便地生成接口文档。 要集成Knife4jSpring Boot项目中,首先需要在项目的pom.xml文件中添加Knife4j的依赖项。可以通过以下代码将其添加到pom.xml文件中: ``` <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.6</version> </dependency> ``` 添加完依赖项后,需要在项目的配置文件(application.properties或application.yml)中配置Knife4j相关的属性。例如,可以添加以下配置来设置文档页面的标题和描述: ``` knife4j.title=API接口文档 knife4j.description=这是一个演示项目的API接口文档 ``` 配置好属性后,可以在项目的启动类上添加`@EnableKnife4j`注解来启用Knife4j: ```java @SpringBootApplication @EnableKnife4j public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 启动项目后,访问`http://localhost:8080/doc.html`即可看到生成的接口文档页面。在这个页面上,可以查看项目中定义的API接口,并且可以方便地进行测试。 总的来说,集成Knife4jSpring Boot项目中很简单,只需要添加依赖、配置属性,然后在启动类上添加注解即可。通过Knife4j生成的接口文档可以方便地查看和测试API接口,使得开发过程更加高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值