國示范校建設(shè)網(wǎng)站品牌廣告語經(jīng)典100條
文章目錄
- 前言
- 一、Knife4j是什么?
- 二、使用步驟
- 1.導入依賴
- 2.編寫配置文件
- 3.編寫controller和實體類
- 4.測試
- 總結(jié)
前言
接上篇整合Swagger鏈接奉上http://t.csdn.cn/9mXSu
一、Knife4j是什么?
官方文檔:https://doc.xiaominfo.com/
knife4j可以理解swagger的升級版,采用的是后端Java代碼和Ui都混合在一個Jar包里面的方式提供給開發(fā)者使用,Knife4j不僅僅將前身的Ui皮膚通過Vue技術(shù)棧進行了重寫,也增加了更多個性化的特性增強功能,基于springfox項目以及OpenAPI的規(guī)范,目前主要支持以Java開發(fā)為主,并且是依賴于大環(huán)境下使用的Spring MVC、Spring Boot、Spring Cloud框架.
二、使用步驟
1.導入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>
2.編寫配置文件
application.yml
spring:mvc:pathmatch:# 配置策略matching-strategy: ant-path-matcher
我們需要在config包下創(chuàng)建Knife4jConfig.java文件
package com.lzl.config;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ReflectionUtils;
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;/*** --效率,是成功的核心關(guān)鍵--** @Author lzl* @Date 2023/3/7 15:56*/
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {@Bean(value = "dockerBean")public Docket dockerBean() {//指定使用Swagger2規(guī)范Docket docket=new Docket(DocumentationType.SWAGGER_2).apiInfo(new ApiInfoBuilder()//描述字段支持Markdown語法.description("# Knife4j RESTful APIs測試").termsOfServiceUrl("https:www.baidu.com/").contact(new Contact("Sincere","Sincere.com","Sincere@qq.com")).version("1.0").build())//分組名稱.groupName("用戶服務(wù)").select()//這里指定Controller掃描包路徑.apis(RequestHandlerSelectors.basePackage("com.lzl")).paths(PathSelectors.any()).build();return docket;}@Beanpublic BeanPostProcessor generateBeanPostProcessor(){return new BeanPostProcessor() {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof WebMvcRequestHandlerProvider) {customizeSpringfoxHandlerMappings(getHandlerMappings(bean));}return bean;}private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {List<T> copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null).collect(Collectors.toList());mappings.clear();mappings.addAll(copy);}@SuppressWarnings("unchecked")private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {try {Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");field.setAccessible(true);return (List<RequestMappingInfoHandlerMapping>) field.get(bean);} catch (IllegalArgumentException | IllegalAccessException e) {throw new IllegalStateException(e);}}};}
}
3.編寫controller和實體類
package com.lzl.pojo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** --效率,是成功的核心關(guān)鍵--** @Author lzl* @Date 2023/3/7 15:04*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("用戶對象")
public class User {@ApiModelProperty("用戶唯一標識")private Integer userId;@ApiModelProperty("用戶名")private String userName;@ApiModelProperty("家庭住址")private String address;
}
這里做一個模擬數(shù)據(jù)庫查詢數(shù)據(jù)的動作
package com.lzl.controller;import com.lzl.pojo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;/*** --效率,是成功的核心關(guān)鍵--** @Author lzl* @Date 2023/3/7 15:08*/@RestController
@RequestMapping("/user")
@Api(tags = "用戶接口")
public class UserController {@GetMapping("/getAll")@ApiOperation("條件查詢+分頁獲取用戶信息")public List<User> getAll(User user){List<User> users = new ArrayList<>();users.add(new User(1,"大飛","草廟村"));users.add(new User(2,"大黃","山洞"));users.add(new User(3,"任老板","臥龍山"));return users;}@DeleteMapping("/deleteInfo")@ApiOperation("根據(jù)ID刪除用戶")public String deleteInfo(Integer id){return "刪除成功!";}
}
4.測試
啟動項目,訪問http://localhost:8080/doc.html
成功!
我們可以查看所有的接口的詳細信息,并調(diào)試
總結(jié)
Knife4j本質(zhì)上和Swagger差不多,沒太大區(qū)別,只不過界面可能更友好一些