SpringBoot 整合 knife4j

knife4j 官方文档地址 https://doc.xiaominfo.com/knife4j/

之前经常使用 swagger2 来调试接口,听神仙朋友介绍 knife4j 比较好用。今天试着使用了下。感觉还不错。这里记录下,方便今后学习使用。

目录结构

这里是使用添加 cookies 方式测试,post,get,上传文件测试

导入 pom 依赖

<!--lombok插件-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><!--在引用时请在maven中央仓库搜索最新版本号--><version>2.0.2</version>
</dependency>

properties 配置

spring.application.name=knife4jserver.port=2080

swaggerConfig 配置

package com.zjy.knife4j.config;import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
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.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
@EnableKnife4j
public class Swagger2Config {@Beanpublic Docket createRestApi() {return  new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.zjy.knife4j.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("swagger-bootstrap-ui RESTful APIs").description("swagger-bootstrap-ui").termsOfServiceUrl("http://localhost:8999/").version("1.0").build();}
}

UserController

package com.zjy.knife4j.controller;import com.zjy.knife4j.model.ResultBO;
import com.zjy.knife4j.model.User;
import com.zjy.knife4j.utils.CookieUtils;
import io.swagger.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.UUID;@RequestMapping("/user")
@RestController
public class UserController {/**日志对象*/private static final Logger logger = LoggerFactory.getLogger(UserController.class);@ApiOperation(value = "用户登录测试接口", notes = "用户登录试接口000")@PostMapping("login")public ResultBO<User> login(@RequestBody User user, HttpServletRequest request, HttpServletResponse response){logger.info("传入的user对象为:{}", user);ResultBO results = new ResultBO();String cookieName = UUID.randomUUID().toString();Cookie cookie = new Cookie("ss_at", cookieName);logger.info("生成的 cookie 对象为:{}, cookies 为:{}", cookie, cookieName);response.addCookie(cookie);results.setCode(200);results.setContent(cookieName);results.setMsg("调用测试接口成功!");results.setSucceed(true);logger.info("调用测试接口成功");return results;}@ApiImplicitParams({@ApiImplicitParam(name = "name",value = "用户名称", required = true, dataType = "String", paramType = "path", example = "默认值")})@ApiResponses(value = {@ApiResponse(code = 200, message = "接口返回成功状态!"),@ApiResponse(code = 500, message = "接口返回未知错误!")})@ApiOperation(value = "查询测试接口", notes = "查询测试接口1111")@GetMapping("getUser/{name}/{message}")public ResultBO<User> getUser(@PathVariable String name, @PathVariable String message, HttpServletRequest request){logger.info("传入的name为:{}, 传入的message为:{}", name, message);logger.info("传入的request为:{}", request);ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest httpServletRequest = attributes.getRequest();String accessToken = CookieUtils.getCookieValue(httpServletRequest, "ss_at");logger.info("获取到的accessToken为:{}", accessToken);ResultBO results = new ResultBO();User user = new User();user.setName(name);user.setMessage(message);results.setCode(200);results.setContent(user);results.setMsg("调用测试接口成功!");results.setSucceed(true);logger.info("调用测试接口成功");return results;}@ApiOperation(value = "保存测试接口", notes = "保存测试接口222")@PostMapping("saveUser")public ResultBO<User> saveUser(@RequestBody User user){logger.info("传入的user对象为:{}", user);ResultBO results = new ResultBO();results.setCode(200);results.setContent(user);results.setMsg("调用测试接口成功!");results.setSucceed(true);logger.info("调用测试接口成功");return results;}@ApiOperation(value = "上传测试接口", notes = "上传测试接口333")@PostMapping("upload")public ResultBO<User> upload(@RequestParam("file") List<MultipartFile> uploadFiles){logger.info("传入的uploadFiles对象集合为:{}", uploadFiles);ResultBO results = new ResultBO();results.setCode(200);results.setMsg("调用测试接口成功!");results.setSucceed(true);logger.info("调用测试接口成功");return results;}
}

ResultBO

package com.zjy.knife4j.model;import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
public class ResultBO<T> {@ApiModelProperty(required = true, notes = "返回数据")private T content;@ApiModelProperty(required = true, notes = "返回成功与否", example = "true")private boolean succeed = true;@ApiModelProperty(required = true, notes = "结果码", example = "200")private int code = 0;@ApiModelProperty(required = true, notes = "返回信息说明", example = "SUCCESS")private String msg;public ResultBO(T content) {this.content = content;}public ResultBO(boolean succeed, int code, String msg, T content) {this.succeed = succeed;this.code = code;this.msg = msg;this.content = content;}public ResultBO(boolean succeed, int code, String msg) {this.succeed = succeed;this.code = code;this.msg = msg;}public ResultBO() {}public static <T> ResultBO<T> success(T content) {return new ResultBO<T>(content);}public static ResultBO success() {return new ResultBO();}public static ResultBO fail(int code, String msg) {return new ResultBO(false, code, msg);}public static ResultBO fail(String msg) {return new ResultBO(false, -1, msg);}public static ResultBO fail() {return fail("fail");}
}

User

package com.zjy.knife4j.model;import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
public class User {@ApiModelProperty(required = true, notes = "用户名", example = "入参用户名")private String name;@ApiModelProperty(required = true, notes = "入参信息", example = "入参信息")private String message;}

CookieUtils

package com.zjy.knife4j.utils;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;/*** cookie工具类*/
public class CookieUtils {public static Cookie getCookie(HttpServletRequest request, String cookieName){Cookie[] cookies = request.getCookies();Cookie cookie = null;try{if (cookies != null && cookies.length > 0){for (int i = 0; i < cookies.length; i++) {if (cookies[i].getName().equals(cookieName)){return cookies[i];}}}}catch (Exception e){e.printStackTrace();}return cookie;}public static String getCookieValue(HttpServletRequest request, String cookieName){Cookie cookie = getCookie(request,cookieName);if (cookie != null){return cookie.getValue();}else {return null;}}public static Cookie getCookie(Cookie[] cookies, String cookieName) {if (null == cookies) {return null;} else {for (Cookie cookie : cookies) {if (cookie.getName().equals(cookieName)) {return cookie;}}return null;}}
}

测试

项目启动后。访问:http://localhost:2080/doc.html#/

+++++++++++++++++

1.get 请求

添加一个 cookies 测试。结果发现测试有问题。cookies 没有传到后台。不知道哪里有问题。知道的大佬留言告诉一下。万分感谢!

控制台输出:

传入的 cookies 没有接到。不知道哪里出了问题了。郁闷!!!+++++++++++++++++

2.post 请求

控制台输出:

测试 OK

3. 上传图片

控制台输出:

测试 OK!

4. 下载

下载的这一堆乱码再熟悉不过了,浏览器直接访问地址:http://localhost:2080/user/download?path=D:/xm/image / 花生米. png 链接是可以下载的 就是本地图片再下载到本地。

控制台打印结果:

测试 OK!


作者:DY丶老周

来源链接:

https://blog.csdn.net/dayonglove2018/article/details/107321915/

SpringBoot整合knife4j ,神仙朋友介绍的相关推荐

  1. SpringBoot整合knife4j

    SpringBoot整合knife4j 导入依赖 <!-- 在需要的项目中导入依赖 --> <dependencies><dependency><groupI ...

  2. SpringBoot整合Knife4j替代Swagger

    文章目录 一.前言 二.正文 1. 基础环境 2. 引入依赖 3. 配置类-Knife4jConfig类 4. 各配置项分别演示 5. 完整代码 三.总结 一.前言 昨天收到一条评论,让我觉得有些小事 ...

  3. SpringBoot 整合 knife4j

    文章目录 简述 2. 导入依赖 3. 创建配置类 4. 创建User实体类 5. 创建开发接口 6. 启动项目 简述 Swagger是一款测试文档Api接口,具体用法见SpringBoot整合Swag ...

  4. SpringBoot整合knife4j(swagger)实现前后端分离可视化接口调试与接口测试

    目录 1.为什么使用Knife4j 2.基本使用 2.1 pom 2.2 配置Knife4j分组 2.3 拦截器放行 2.4 实体类 2.5 SpringBoot整合基础使用 2.5.1 基础配置 2 ...

  5. SpringBoot整合Knife4j问题

    1. 前言 最近工作中需要到Knife4j, 加上自己的项目充电鸭上本来好的Knife4j文档突然不好使了,遇到的问题正好记录一下 2.个人网站遇到的问题 个人网站本来的事还挺好用的,经过我得一阵折腾 ...

  6. springboot整合knife4j,从此告别手写接口文档

    关于knife4j Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目 一开始项目初衷是为了写一个增 ...

  7. SpringBoot整合Knife4j框架

    相关 简化代码的Lombok(跳转) 文章目录 一.Knife4j 二.环境准备 1.引入依赖 2.添加配置 3.设置配置类 4.运行访问 三.基本用法 1.控制器 2.封装类 四.效果演示 五.其它 ...

  8. SpringBoot整合Shiro搭建登录注册认证授权权限项目模板

    主要内容: 1 SpringBoot整合Shiro安全框架; 2 Shiro主要学习内容总结;(执行流程.主要对象接口.注意事项等) 3 Redis实现对权限信息缓存; ! 温馨提示: 想要快速搭Sh ...

  9. springboot整合websocket实现消息推送

    springboot整合websocket 1.WebSocket介绍与原理 介绍:WebSocket是HTML5一种新的协议.它实现了浏览器与服务器全双工通信.一开始的握手需要借助HTTP请求完成. ...

最新文章

  1. email util demo
  2. mysql数据库物理备份_MySQL数据库之xtrabackup物理备份(一)
  3. Source Insight 4.0常用设置
  4. Spring-Cloud中的统一配置中心
  5. CRC冗余校验举例和原理
  6. 牛客15187 分元宵 (快速幂)
  7. linux有读EC RAM的工具吗,Step to UEFI (179)Shell下 EC Ram 读取工具
  8. zabbix-2.0.8日常巡检-检测项目状态
  9. 估值150亿,账上还有近10亿现金,却减员500人,这家公司CEO的说法你认同吗?...
  10. 用Java模仿简单的Ping命令
  11. 这10个比较好用的服务器管理软件你都知道吗?
  12. KX3552驱动的安装大九
  13. 【java初学者】理解,从面向过程 到 面向对象,面向接口,面向切面
  14. 使用ndp.view标注大型医学图像
  15. Unity 编辑器开发实战【Custom Editor】- FSM Editor
  16. AI-人工智能学习线路图
  17. 人+山=仙,人+谷=俗
  18. 2021-2027全球与中国成像流式细胞仪市场现状及未来发展趋势
  19. 中国历史上十大冤死名将
  20. linux窗口装饰,Ubuntu通过PPA安装Emerald半透明窗口装饰与主题

热门文章

  1. 《CREStereo:Practical Stereo Matching via Cascaded Recurrent Network with Adaptive Correlation》论文笔记
  2. “完形填空”五步解题法
  3. 2019届百度暑期实习面试经验分享
  4. 结对项目-最长单词链
  5. vue-element-admin登录接口修改
  6. Microsoft edge 浏览器打开是360导航解决方法
  7. 平面设计素材网站有哪些?常用的找素材两个网站就够
  8. 百度计算广告学沙龙笔记
  9. 转知乎的文章 都用 Python 来做什么啊
  10. 《kafka问答100例 -2》 创建Topic的时候 什么时候在Broker磁盘上创建的日志文件