96SEO 2026-02-20 08:39 25
knife4j引入knife4j注解案例knife4j增强功能接口添加作者资源屏蔽访问页面加权控制接口排序分组排序请求参数缓存过滤请求参数禁用调试禁用搜索框SpringBoot

在配置文件application.properties中开启增强模式
dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion3.0.3/version
org.springframework.beans.factory.annotation.Value;
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.Configuration;
org.springframework.context.annotation.Import;
springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
springfox.documentation.builders.*;
springfox.documentation.service.*;
springfox.documentation.spi.DocumentationType;
springfox.documentation.spring.web.plugins.Docket;
springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;Slf4j
Import(BeanValidatorPluginsConfiguration.class)
{Value(${spring.application.name})private
Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName(applicationName).select()//
添加Api注解才显示.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))//
.apis(RequestHandlerSelectors.basePackage(com.yolo)).paths(PathSelectors.any()).build();}/***
ApiInfoBuilder().title(API文档).description(API文档).contact(new
Contact(yolo,https://gitee.com/huanglei1111,2936412130qq.com)).version(1.0.0).build();}
https://doc.xiaominfo.com/knife4j
true:关闭swaggerfalse:开启swaggerproduction:
tags表示该类的标签在页面会独立显示一个菜单ApiOperation(value
表示标签在页面会独立显示一个菜单ApiImplicitParam(name
方法只有一个基本类型参数时加在方法上。
方法有多个参数时加在ApiImplicitParams内
默认值这个还是有必要填写的在页面进行请求时会自动填充ApiImplicitParams(value
当请求方法中的请求参数很多的时候例如saveUser(String
与ApiImplicitParam使用的效果等同根据个人喜好进行使用ApiModel(value
则需要加在UserDTO这个类上面(可以参照下面的示例)ApiModelProperty(value
属性的示例值在页面会自动填充该值ApiIgnore注解类、参数、方法注解后将不在Swagger
com.yolo.knife4j.controller;import
cn.hutool.core.collection.ListUtil;
com.yolo.knife4j.base.ResultVo;
com.yolo.knife4j.dto.UserAddRequest;
org.springframework.web.bind.annotation.*;import
java.util.Date;ApiResponses(value
ResultVo.builder().build().setCode(200).setSuccess(true).setTime(new
Date()).setMsg(保存用户成功).setData(userAddRequest);}ApiOperation(value
ResultVo.builder().build().setCode(200).setSuccess(true).setTime(new
Date()).setMsg(保存用户成功).setData(userAddRequest);}GetMapping(/list)ApiOperation(value
StudentVO.builder().build().setAddress(wuhan).setCode(2);vo.setStudentVOS(ListUtil.of(studentVO));return
ResultVo.builder().build().setCode(200).setSuccess(true).setTime(new
Date()).setMsg(查找用户列表).setData(vo);}DeleteMapping(/{id})ApiOperation(value
ResultVo.builder().build().setCode(200).setSuccess(true).setTime(new
com.fasterxml.jackson.annotation.JsonFormat;
io.swagger.annotations.ApiModel;
io.swagger.annotations.ApiModelProperty;
lombok.experimental.Accessors;import
-8054007511410819665L;ApiModelProperty(value
是否成功标识.true表示成功,false表示失败ApiModelProperty(success标识,true表示成功,false表示失败)private
操作成功时需要响应给客户端的响应数据ApiModelProperty(响应信息)private
msg;ApiModelProperty(响应数据)private
data;ApiModelProperty(当前时间)JsonFormat(pattern
classpath:sign/*setting:language:
falseenableReloadCacheParameter:
trueenableFilterMultipartApiMethodType:
192.168.0.193:8000enableHomeCustom:
classpath:markdown/home.mdenableSearch:
2019-[浙江八一菜刀股份有限公司](https://gitee.com/xiaoym/knife4j)enableDynamicParameter:
如果在方法上使用了注解并且也在类上使用了注解那么最后的展示结果以方法上的注解为准
true:关闭swaggerfalse:开启swaggerproduction:
针对Swagger的资源接口,Knife4j提供了简单的Basic认证功能
true:关闭swaggerfalse:开启swaggerproduction:
123456如果开启生产环境屏蔽了开启basic认证是不生效的
这三个注解是存在优先级的也就是说当同时使用时只会有一个注解生效所以在使用的时候需要特别注意。
优先级规则如下
我们在调试接口的时候有的接口会有很多参数当我们好不容易填好了所有的参数由于我们不小心关闭了页面下次再调试的时候发现还需要再次将参数输入一遍心态会爆炸吧所以
我们在开发过程中经常会遇到这样的一个问题新增和修改接口修改接口需要传递修改的记录id但是新增则不需要而后端往往会将修改和新增的入参对象设置为一个对象那么这个对象中必然会存在
支持了请求参数的过滤忽略实现方式也是非常的简单使用自定义增强注解ApiOperationSupport中的ignoreParameters属性,可以强制忽略要显示的参数
username;ApiModelProperty(value
province;ApiModelProperty(value
district;ApiModelProperty(value
/saveUser)ApiOperation(新增用户信息-表单)ApiOperationSupport(author
userDTO){System.out.println(前端传递的用户信息
/updateUser)ApiOperation(编辑用户信息)ApiOperationSupport(author
userDTO){System.out.println(前端传递的用户信息
success;}在过滤字段的时候第一层我们只要填写对象中的属性名即可但如果需要过滤第二层根据忽略规则中的第二条我们在
专业说法是实例名.属性名以新增用户为例我们需要过滤用户id那么写法就是userDTO.id其中
/saveUser)ApiOperation(新增用户信息)ApiOperationSupport(author
{userDTO.id,userDTO.userAddressDTO.id})public
userDTO){System.out.println(前端传递的用户信息
falseenableDebug:该属性是一个Boolean值代表是否启用调试功能,默认值为true(代表开启调试)如果要禁用调试该值设为false
同样此操作也需要开发者在创建Docket逻辑分组对象时通过Knife4j提供的工具对象OpenApiExtensionResolver将扩展属性进行赋值
发者如果想要禁用Ui界面中的搜索功能需要通过增强属性进行配置此功能需要开启增强功能
falseenableSearch:该属性是一个Boolean值代表是否启用搜索功能,默认值为true(代表开启搜索)如果要禁用搜索该值设为false
同样此操作也需要开发者在创建Docket逻辑分组对象时通过Knife4j提供的工具对象OpenApiExtensionResolver将扩展属性进行赋值。
具体的代码实现请参考禁用调试和自定义主页内容我这里就不重复了。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback