SpringBoot整合knife4j ,神仙朋友介绍的
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 ,神仙朋友介绍的相关推荐
- SpringBoot整合knife4j
SpringBoot整合knife4j 导入依赖 <!-- 在需要的项目中导入依赖 --> <dependencies><dependency><groupI ...
- SpringBoot整合Knife4j替代Swagger
文章目录 一.前言 二.正文 1. 基础环境 2. 引入依赖 3. 配置类-Knife4jConfig类 4. 各配置项分别演示 5. 完整代码 三.总结 一.前言 昨天收到一条评论,让我觉得有些小事 ...
- SpringBoot 整合 knife4j
文章目录 简述 2. 导入依赖 3. 创建配置类 4. 创建User实体类 5. 创建开发接口 6. 启动项目 简述 Swagger是一款测试文档Api接口,具体用法见SpringBoot整合Swag ...
- SpringBoot整合knife4j(swagger)实现前后端分离可视化接口调试与接口测试
目录 1.为什么使用Knife4j 2.基本使用 2.1 pom 2.2 配置Knife4j分组 2.3 拦截器放行 2.4 实体类 2.5 SpringBoot整合基础使用 2.5.1 基础配置 2 ...
- SpringBoot整合Knife4j问题
1. 前言 最近工作中需要到Knife4j, 加上自己的项目充电鸭上本来好的Knife4j文档突然不好使了,遇到的问题正好记录一下 2.个人网站遇到的问题 个人网站本来的事还挺好用的,经过我得一阵折腾 ...
- springboot整合knife4j,从此告别手写接口文档
关于knife4j Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目 一开始项目初衷是为了写一个增 ...
- SpringBoot整合Knife4j框架
相关 简化代码的Lombok(跳转) 文章目录 一.Knife4j 二.环境准备 1.引入依赖 2.添加配置 3.设置配置类 4.运行访问 三.基本用法 1.控制器 2.封装类 四.效果演示 五.其它 ...
- SpringBoot整合Shiro搭建登录注册认证授权权限项目模板
主要内容: 1 SpringBoot整合Shiro安全框架; 2 Shiro主要学习内容总结;(执行流程.主要对象接口.注意事项等) 3 Redis实现对权限信息缓存; ! 温馨提示: 想要快速搭Sh ...
- springboot整合websocket实现消息推送
springboot整合websocket 1.WebSocket介绍与原理 介绍:WebSocket是HTML5一种新的协议.它实现了浏览器与服务器全双工通信.一开始的握手需要借助HTTP请求完成. ...
最新文章
- email util demo
- mysql数据库物理备份_MySQL数据库之xtrabackup物理备份(一)
- Source Insight 4.0常用设置
- Spring-Cloud中的统一配置中心
- CRC冗余校验举例和原理
- 牛客15187 分元宵 (快速幂)
- linux有读EC RAM的工具吗,Step to UEFI (179)Shell下 EC Ram 读取工具
- zabbix-2.0.8日常巡检-检测项目状态
- 估值150亿,账上还有近10亿现金,却减员500人,这家公司CEO的说法你认同吗?...
- 用Java模仿简单的Ping命令
- 这10个比较好用的服务器管理软件你都知道吗?
- KX3552驱动的安装大九
- 【java初学者】理解,从面向过程 到 面向对象,面向接口,面向切面
- 使用ndp.view标注大型医学图像
- Unity 编辑器开发实战【Custom Editor】- FSM Editor
- AI-人工智能学习线路图
- 人+山=仙,人+谷=俗
- 2021-2027全球与中国成像流式细胞仪市场现状及未来发展趋势
- 中国历史上十大冤死名将
- linux窗口装饰,Ubuntu通过PPA安装Emerald半透明窗口装饰与主题
热门文章
- 《CREStereo:Practical Stereo Matching via Cascaded Recurrent Network with Adaptive Correlation》论文笔记
- “完形填空”五步解题法
- 2019届百度暑期实习面试经验分享
- 结对项目-最长单词链
- vue-element-admin登录接口修改
- Microsoft edge 浏览器打开是360导航解决方法
- 平面设计素材网站有哪些?常用的找素材两个网站就够
- 百度计算广告学沙龙笔记
- 转知乎的文章 都用 Python 来做什么啊
- 《kafka问答100例 -2》 创建Topic的时候 什么时候在Broker磁盘上创建的日志文件