当前位置: 首页 > news >正文

【knife4j】接口分组配置;登录拦截器放行;登录拦截器配置token;给全局异常处理类添加注解;解决上传文件不显示文件域;参数扁平化;@Parameter

@Parameter

@Parameter是用来为 API 接口参数添加元数据(描述信息)的注解,这些信息最终会生成到 OpenAPI 规范的文档中,供 Knife4j/Swagger UI 等工具展示

简单来说:它让 API 的使用者能清楚地知道每个参数的含义、是否必填、格式要求等

@Operation(summary = "查询指定课程的学习记录") @GetMapping("/course/{courseId}") public LearningLessonDTO queryLearningRecordByCourse( @PathVariable @Parameter(description = "课程id", example = "2") Long courseId){ return recordService.queryLearningRecordByCourse(courseId); }

参数扁平化

springdoc: default-flat-param-object: true

效果:

没有添加配置效果:

接口分组配置

088-尚庭公寓-项目开发-后台管理-初始配置-Knife4j_哔哩哔哩_bilibili

后台管理系统和移动端接口不同

web

@Configuration public class Knife4jConfiguration { // 配置了接口文档的基本信息 @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info() .title("后台管理系统API") .version("1.0") .description("后台管理系统API"); } // 下面的Bean对应一个个的接口分组 // @Bean public GroupedOpenApi systemAPI() { return GroupedOpenApi.builder().group("系统信息管理"). pathsToMatch( "/admin/system/**" ). build(); } @Bean public GroupedOpenApi loginAPI() { return GroupedOpenApi.builder().group("登录管理"). pathsToMatch( "/admin/login/**", "/admin/info"). build(); } @Bean public GroupedOpenApi apartmentAPI() { return GroupedOpenApi.builder().group("公寓信息管理"). pathsToMatch( "/admin/apartment/**", "/admin/room/**", "/admin/label/**", "/admin/facility/**", "/admin/fee/**", "/admin/attr/**", "/admin/payment/**", "/admin/region/**", "/admin/term/**", "/admin/file/**" ).build(); } @Bean public GroupedOpenApi leaseAPI() { return GroupedOpenApi.builder().group("租赁信息管理"). pathsToMatch( "/admin/appointment/**", "/admin/agreement/**" ).build(); } @Bean public GroupedOpenApi userAPI() { return GroupedOpenApi.builder().group("平台用户管理"). pathsToMatch( "/admin/user/**" ).build(); } }

app

@Configuration public class Knife4jConfiguration { @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info() .title("APP接口") .version("1.0") .description("用户端APP接口");+ } @Bean public GroupedOpenApi userAPI() { return GroupedOpenApi.builder().group("用户信息"). pathsToMatch("/app/user/**"). build(); } @Bean public GroupedOpenApi loginAPI() { return GroupedOpenApi.builder().group("登录信息"). pathsToMatch("/app/login/**", "/app/info"). build(); } @Bean public GroupedOpenApi personAPI() { return GroupedOpenApi.builder().group("个人信息"). pathsToMatch( "/app/history/**", "/app/appointment/**", "/app/agreement/**" ). build(); } @Bean public GroupedOpenApi lookForRoomAPI() { return GroupedOpenApi.builder().group("找房信息"). pathsToMatch( "/app/apartment/**", "/app/room/**", "/app/payment/**", "/app/region/**", "/app/term/**" ). build(); } }

登录拦截器放行

3.5 访问权限控制 | Knife4j

这些是knife4j需要的路径

给登录拦截器放行

@Configuration @RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { private final LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // 将拦截器注册到Spring MVC的拦截器链中 registry.addInterceptor(loginInterceptor) .addPathPatterns("/**") .excludePathPatterns( "/v3/api-docs/**", "/doc.html", "/swagger-ui/**", "/swagger-resources/**" ); } }

让接口文档带上token

146-尚庭公寓-项目开发-后台管理-系统管理-登录管理-拦截器_哔哩哔哩_bilibili

让接口文档在发送测试请求时,带上token

之后就能通过拦截器的验证

这个全局参数只对当前分组生效,有多个分组要设置多次

参数名称和前端约定好

参数值获取真实的token

如果是自己生成token,为了方便可以调整有效期

生成完后,再恢复成一小时的有效期

需要给全局异常处理类添加注解

关于异常java.lang.NoSuchMethodError: ‘void org.springframework.web.method.ControllerAdviceBean.<init>(ja_java.lang.nosuchmethoderror: 'void org.springframe-CSDN博客

使用@Hidden,不然接口文档报错

// common模块/exception /** * 全局异常处理器 * Knife4j(Swagger)全局异常添加@Hidden防止报错 */ @Hidden @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public Result handle(Exception e){ e.printStackTrace(); return Result.fail(); } }

解决上传文件不显示文件域

【Knife4j】解决SpringBoot整合Knife4j 3.0.3 文件上传不显示文件域_knife4j调试文件传参,选不了文件-CSDN博客

使用@RequestPart,我之前使用了@RequestParam,没用

@Tag(name = "文件管理") @RequestMapping("/file") @RestController @RequiredArgsConstructor public class FileUploadController { private final FileService fileService; @Operation(summary = "上传文件") @PostMapping("upload") public Result<String> upload(@RequestPart("file") MultipartFile file) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException { String url = fileService.uploadFile(file); return Result.ok(url); } }
http://www.jsqmd.com/news/828867/

相关文章:

  • Winhance中文版:Windows系统优化终极指南,3分钟让电脑焕然一新
  • 终极指南:3分钟为Windows创建高性能虚拟显示器
  • 异构无人机群软件更新:SwarmUpdate框架解析与实践
  • EPS怎么转PDF?7种转换方法实测+在线工具盘点(2026版) - AI测评专家
  • syncpack 迁移指南:从 v13 到 v14 的完整步骤与注意事项
  • 为每日更新的内容生成需求设计基于Taotoken多模型的工作流
  • Neo4j APOC虚拟图功能:无需存储的图数据操作终极指南 [特殊字符]
  • AI写专著高效途径:选对工具,一键生成20万字专著不是梦!
  • 从激光雷达到智能家居:深入浅出聊聊激光安全分类(Class 1/2/3/4)那点事儿
  • 如何快速构建你的第一个AI Discord聊天机器人:gpt-discord-bot完整指南
  • 美团购物卡回收哪种方式最快最稳?实测来了 - 圆圆收
  • 宁波双利再生资源:慈溪专业的废旧二手车回收选哪家 - LYL仔仔
  • ChanlunX:如何用C++实现缠论技术分析自动化,提升交易决策精度
  • 2026 全网正规流量卡分销平台汇总|靠谱号卡代理平台排行、官方推荐码大全、佣金置顶全网比价 - 172号卡
  • QtScrcpy FPS游戏键位映射:实现行走与冲刺动态切换的完整方案
  • AppleJuice与法律边界:如何在教育框架内负责任地使用
  • 2026年主流降AI率工具测评:10款平台横比,教你轻松选(含免费降AI方法) - 降AI实验室
  • LVM数据集准备完全手册:从原始图像到4200亿视觉令牌
  • 基于Tauri与语义网络的本地优先知识管理工具Engram技术解析
  • 如何为yt-dlp-gui扩展新视频平台支持:完整开发者指南
  • 如何快速安装taskwarrior-tui:5种安装方法全解析
  • 深入解析 magic-cli:基于模板的自动化代码生成工具设计与实践
  • 2026年柯桥幼小衔接辅导机构排行 全托小班课程价格和口碑深度横评 - 奔跑123
  • 如何快速找回比特币钱包密码:btcrecover完整使用指南
  • 别再死记硬背了!用PyTorch和TensorFlow的代码实例,帮你彻底搞懂CNN尺寸计算
  • 618别当冤大头!2026京东淘宝618完全攻略:46天活动周期、8大核心口令、3重优惠叠加,一文看懂怎么买最省 - 资讯焦点
  • TPT19参数集混合执行:高效解决组合测试爆炸难题
  • 5分钟快速上手p5.js Web Editor:创意编程的终极免费在线编辑器
  • NCBI基因组数据下载:3分钟掌握高效科研工具
  • 终极风扇控制方案:如何用FanControl实现Windows系统智能散热与极致静音