news 2026/3/26 13:58:41

Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)

博主采用的是SpringBoot3+knife4j的框架,如果你采用的是SpringBoot2框架,那么可以看下面这几篇:

Knife4j文档请求异常 | Knife4j

记一次集成swagger2(Knife4j)在线文档异常,提示:Knude4j文档请求异常_knife4j文档请求异常-CSDN博客全网多种方式解决Knife4j文档请求异常-CSDN博客


博主最近做苍穹外卖时碰到了一个问题,Knife4j文档请求异常,如下图所示:

于是F12打开控制台准备进行debug,发现报出如下错误:

大致意思是JSON返回了一个token,继续从网络的响应查找:

发现响应码(200)正常,并且返回格式为json,查看响应内容:

居然是一长串字符串,而不是Json数据。于是到了最令人烦躁的debug环节,从编辑器控制台查看没有任何ERROR甚至WARN信息:

2024-01-09T15:17:43.508+08:00 INFO 22868 --- [ main] com.sky.SkyApplication : Starting SkyApplication using Java 17.0.8 with PID 22868 (E:Codesky_take_out_projsky_take_outsky_server argetclasses started by User in E:Codesky_take_out_projsky_take_out) 2024-01-09T15:17:43.510+08:00 INFO 22868 --- [ main] com.sky.SkyApplication : The following 1 profile is active: "dev" 2024-01-09T15:17:44.228+08:00 INFO 22868 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2024-01-09T15:17:44.230+08:00 INFO 22868 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. 2024-01-09T15:17:44.265+08:00 INFO 22868 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 23 ms. Found 0 Redis repository interfaces. 2024-01-09T15:17:44.830+08:00 INFO 22868 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2024-01-09T15:17:44.837+08:00 INFO 22868 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-01-09T15:17:44.837+08:00 INFO 22868 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.16] 2024-01-09T15:17:44.920+08:00 INFO 22868 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-01-09T15:17:44.920+08:00 INFO 22868 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1369 ms Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts 2024-01-09T15:17:45.242+08:00 INFO 22868 --- [ main] com.sky.config.WebMvcConfiguration : 开始注册自定义拦截器... 2024-01-09T15:17:45.908+08:00 INFO 22868 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2024-01-09T15:17:45.917+08:00 INFO 22868 --- [ main] com.sky.SkyApplication : Started SkyApplication in 3.027 seconds (process running for 3.722) 2024-01-09T15:17:45.919+08:00 INFO 22868 --- [ main] com.sky.SkyApplication : server started 2024-01-09T15:19:13.412+08:00 INFO 22868 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2024-01-09T15:19:13.413+08:00 INFO 22868 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2024-01-09T15:19:13.414+08:00 INFO 22868 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2024-01-09T15:19:14.040+08:00 INFO 22868 --- [nio-8080-exec-6] o.springdoc.api.AbstractOpenApiResource : Init duration for springdoc-openapi is: 261 ms

突然想起来之前设置过一个消息转换器,将Date类型转换为yyyy-MM-dd HH:mm格式去显示,于是考虑是否因为消息转换器,将JSON数据不正常解析了?

/** * 扩展消息转换器,将日期类型从列表转换为时间戳 * @param converters 消息转换器列表 */ @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); jackson2HttpMessageConverter.setObjectMapper(new JacksonObjectMapper()); converters.add(0,jackson2HttpMessageConverter); }

于是将消息转换器注释掉,便正常显示了:

返回的JSON数据也正常了,代价是后端返回的时间数据不是上面提到的格式,而是列表,导致前端显示错误的格式:

至此


如果你还想保留消息转换器,让后端返回正确的时间数据格式,那么可以调整消息转换器列表中转换器的顺序,代码如下。

/** * 扩展消息转换器,将日期类型从列表转换为时间戳 * 这个是导致knife4j不能正常显示的罪魁祸首,特别要注意添加的位置 * @param converters 消息转换器列表 */ @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); jackson2HttpMessageConverter.setObjectMapper(new JacksonObjectMapper()); converters.add(converters.size()-1,jackson2HttpMessageConverter); }

一些参考文章:

MappingJackson2HttpMessageConverter使用及jackson配置原理和避坑说明-CSDN博客

一步到位 SpringBoot 序列化与消息转换器 (你需要的这里都有)_springboot 序列化 自定义转换器-CSDN博客

为什么说HttpMessageConverter的顺序非常重要_SpringBoot?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/23 2:12:28

LeetCode 172. Factorial Trailing Zeroes 题解

题目概述 LeetCode 172. Factorial Trailing Zeroes&#xff1a;给定一个整数 n&#xff0c;返回 n! 中尾随零&#xff08;结尾连续的 0&#xff09;的个数。leetcode​ 注意&#xff1a; n! n (n − 1) … 2 10 ≤ n ≤ 10^4Follow up&#xff1a;是否可以在对数时间复…

作者头像 李华
网站建设 2026/3/21 15:40:19

AWS OpenSearch Service TLS 策略升级指南

📋 概述 AWS OpenSearch Service 将于 2026 年 4 月 20 日停止支持 TLS 1.0 和 1.1 版本。本文详细介绍如何安全地将 OpenSearch 域的 TLS 策略升级到 TLS 1.2,确保服务的持续可用性和安全性。 🚨 重要通知 截止日期: 2026 年 4 月 20 日 影响: 使用 TLS 1.0/1.1 的域将…

作者头像 李华
网站建设 2026/3/4 13:58:54

深度学习毕设项目:基于人工智能深度学习的土豆疾病识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/12 15:27:19

Spring Boot Admin与Kubernetes集成监控

摘要 本文深入探讨Spring Boot Admin与Kubernetes的集成监控方案&#xff0c;包括容器化部署、服务发现、资源监控等关键技术点。通过详细的技术解析和实践示例&#xff0c;帮助开发者构建基于Kubernetes的微服务监控体系。 1. 引言 Kubernetes作为容器编排的标准&#xff0c;与…

作者头像 李华
网站建设 2026/3/24 23:46:47

强烈安利!专科生毕业论文必备TOP9 AI论文平台

强烈安利&#xff01;专科生毕业论文必备TOP9 AI论文平台 2026年专科生论文写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着AI技术在学术领域的深入应用&#xff0c;越来越多的专科生开始借助智能工具提升论文写作效率。然而面对市场上琳琅满目的AI论文平台&am…

作者头像 李华
网站建设 2026/3/13 9:24:49

【毕业设计】机器学习 基于python-cnn深度学习的罗马数据集训练识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华