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 NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B