SpringBoot引入Knife4j(增强版Swagger)为Java MVC框架生成api文档

本文主要是介绍SpringBoot引入Knife4j(增强版Swagger)为Java MVC框架生成api文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍!

 

快速开始

添加maven依赖

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

配置文件配置

@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfiguration {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("2.1版本").select()// 这里指定Controller扫描包路径.apis(RequestHandlerSelectors.basePackage("com.jaemon.app.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("app项目接口文档").description("app项目").termsOfServiceUrl("http://IP:PORT/{contextPath}/doc.html").contact(new Contact("Jaemon", "http://answer", "answer_ljm@163.com")).license("app service").licenseUrl("https://www.github.com").version("1.0").build();}
}

访问: http://IP:PORT/{contextPath}/doc.html
eg. http://localhost:8888/oms/doc.html

 

入门使用

实体类

@Data
@ApiModel("用户查询请求对象")
public class UserReqDTO {@ApiModelProperty(notes = "用户姓名")private String userName;@ApiModelProperty(notes = "登录账号")private String loginName;
}
@Data
@ApiModel("用户返回视图对象")
@AllArgsConstructor
public class UserVO {@ApiModelProperty(required = true, notes = "用户id")private Long id;@ApiModelProperty(required = true, notes = "用户姓名")private String userName;@ApiModelProperty(required = true, notes = "登录账号")private String loginName;
}
@ApiModel("通用接口返回对象")
@Data
@AllArgsConstructor
public class Result<T> {@ApiModelProperty(required = true, notes = "响应码", example = "0")private int code;@ApiModelProperty(required = true, notes = "响应描述", example = "成功")private String msg;@ApiModelProperty(notes = "响应数据")private T data;
}

控制层

@Api(value = "", tags = "测试接口")
// 大分类顺序
@ApiSort(value = 1)
@RestController
@RequestMapping(value = "/demo")
public class DemoController {@PostMapping("/userList")@ApiOperation(value = "userList接口", notes = "查询用户列表")@ApiResponses(value = {@ApiResponse(code = 0, message = "请求成功"),@ApiResponse(code = 1, message = "请求失败")})public Result userList(@RequestBody UserReqDTO userReqDTO) {List<UserVO> userVOS = Lists.newArrayList();UserVO userVO;for (int i = 0; i < 5; i++) {userVO = new UserVO((long)i, "Jaemon" + i, "Jaemon" + i);userVOS.add(userVO);}return new Result(0, "成功", userVOS);}@ApiOperation(value = "findByUserId接口", notes = "根据用户id查询用户信息")@ApiImplicitParam(name = "id", value = "用户id", paramType = "path")@GetMapping("/findByUserId/{id}")public Result<UserVO> findByUserId(@PathVariable("id") Long id) {UserVO userVO = new UserVO(id, "Jaemon", "Jaemon");return new Result(0, "成功", userVO);}}

 

常用注解说明

  • @Api: 用在类上,说明该类的作用
  • @ApiOperation: 用在方法上,说明方法的作用,标注在具体请求上,value和notes的作用差不多,都是对请求进行说明;tags则是对请求进行分类的,比如你有好几个controller,分别属于不同的功能模块,那这里我们就可以使用tags来区分了,看上去很有条理
  • @ApiImplicitParams: 用在方法上包含一组参数说明
  • @ApiImplicitParam: 用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
    • paramType:参数放在哪个地方
    • header 请求参数的获取:@RequestHeader
    • query 请求参数的获取:@RequestParam
    • path(用于restful接口) 请求参数的获取:@PathVariable
    • body(不常用)
    • form(不常用)
    • name: 参数名
    • dataType: 参数类型
    • required: 参数是否必须传
    • value: 参数的意思
    • defaultValue: 参数的默认值
  • @ApiResponses: 用于表示一组响应
  • @ApiResponse: 用在@ApiResponses中,一般用于表达一个错误的响应信息
    • code: 数字,例如400
    • message: 信息,例如”请求参数没填好”
    • response: 抛出异常的类
  • @ApiModel: 描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)表明这是一个被swagger框架管理的model,用于class上
  • @ApiModel: 使用在实体类上,描述实体类。
  • @ApiModelProperty : 使用在实体类上的成员变量上,描述成员变量的含义。

 

SpringCloud微服务架构中使用

在Spring Cloud的微服务架构下,每个微服务其实并不需要引入前端的Ui资源,因此在每个微服务的Spring Boot项目下,引入knife4j提供的微服务starter

<dependency>    <groupId>com.github.xiaoymin</groupId>    <artifactId>knife4j-micro-spring-boot-starter</artifactId>    <version>${knife4j.version}</version>
</dependency>

在网关聚合文档服务下,可以再把前端的ui资源引入

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

 

Reference

  • knife4j
  • Swagger 增强(knife4j)自动生成Api 文档(SpringBoot & SpringCloud Gateway自动配置

这篇关于SpringBoot引入Knife4j(增强版Swagger)为Java MVC框架生成api文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005402

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S