我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Springboot下swagger-ui.html访问不到的解决方案

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Springboot下swagger-ui.html访问不到的解决方案

Springboot swagger-ui.html访问不到

问题

在前面的Swagger2的基本配置中是可以访问到swagger-ui.html的

但当自定义继承配置WebMvcConfigurationSupport后便无法访问到该页面,原因参考请看参考资料。

首先看我的自定义配置,


*************
 * HttpMessageConverter转换处理
 * 处理转义hmtl标签为正常的hmtl标签
 * @author zjcjava@163.com
 *
 */
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Bean
    public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(
                DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.getSerializerProvider().setNullValueSerializer(
                new JsonSerializer<Object>() {
                    @Override
                    public void serialize(Object value, JsonGenerator jgen,
                            SerializerProvider provider) throws IOException,
                            JsonProcessingException {
                        jgen.writeString("");
                    }
                });
        // 进行HTML解码
        objectMapper.registerModule(new SimpleModule().addSerializer(
                String.class, new JsonSerializer<String>() {
                    @Override
                    public void serialize(String value, JsonGenerator jgen,
                            SerializerProvider provider) throws IOException,
                            JsonProcessingException {
                        jgen.writeString(StringEscapeUtils.unescapeHtml4(value));
                    }
                }));
        jsonConverter.setObjectMapper(objectMapper);
        return jsonConverter;
    }
    @Override
    public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        converters.add(customJackson2HttpMessageConverter());
        super.addDefaultHttpMessageConverters(converters);
    }
}

如果我把该文件全部注释掉则会正常显示,否则无法访问到swagger-ui.html,

解决方法

如果继承了WebMvcConfigurationSupport,则在配置文件在中配置的相关内容会失效,需要重新指定静态资源

因此参照资料2我做了处理如下,在该代码的末尾加上静态资源配置

代码加在


*************
 * HttpMessageConverter转换处理
 * 处理转义hmtl标签为正常的hmtl标签
 * @author zjcjava@163.com
 *
 */
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Bean
    public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(
                DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.getSerializerProvider().setNullValueSerializer(
                new JsonSerializer<Object>() {
                    @Override
                    public void serialize(Object value, JsonGenerator jgen,
                            SerializerProvider provider) throws IOException,
                            JsonProcessingException {
                        jgen.writeString("");
                    }
                });
        // 进行HTML解码
        objectMapper.registerModule(new SimpleModule().addSerializer(
                String.class, new JsonSerializer<String>() {
                    @Override
                    public void serialize(String value, JsonGenerator jgen,
                            SerializerProvider provider) throws IOException,
                            JsonProcessingException {
                        jgen.writeString(StringEscapeUtils.unescapeHtml4(value));
                    }
                }));
        jsonConverter.setObjectMapper(objectMapper);
        return jsonConverter;
    }
    @Override
    public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        converters.add(customJackson2HttpMessageConverter());
        super.addDefaultHttpMessageConverters(converters);
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

swagger-ui的坑,swagger-ui.html无显示

且返回200无报错,且/v2/api-docs可以正常访问

因为粗心,踩中的坑,代码规范,细心真的能节省很多时间

上图,界面显示如图,一切都正常,控制台,也没有报错,很诡异吧

docs却可以正常访问,包括接口,都是正常的,网上很多解决方案都是说,跨域问题,或者是静态资源访问不到

1,首先跨域问题,会报错,有很明显的报错提示,这里排除,

2,静态资源,可以参考csdn上的其他方案很多,排查方法,可以查看targer目录下是否有静态文件

现在说这个问题导致的原因,以及解决方案

由于当时再写监听器相关代码,里面还涉及到过滤器,网上说到swagger会和拦截器有冲突,所以一直错误认为是监听器导致的问题,而且还有fastdfs的相关代码,也有说这两个起冲突,没办法,一一排查,进行版本回滚,发现fasdfs这个版本没有问题,这里要说,平时开发一定要切分支,分支切不了也要多提交版本,这样一旦出现问题也好解决。

然后下个版本发现,加上监听器,问题就又出现了,把监听器所有代码注释掉,问题依旧,百思不得其解,无奈,地毯扫描,版本不一样的全部注释,直到注释到controller层,又正常了,非常怀疑,一个controller,service业务代码这些不应该导致出问题的,怎么会是这的问题,然后进入代码准备细查,打开代码惊喜就来了

这是代码,本来还准备去看service层,看下是不是业务上有什么代码报错,到这就感觉更奇怪了,什么代码都没写,去掉就正常了,然后搜一下是不是方法名重复了,发现没有,

这时发现:@RequestMapping(),对就是这个注解,里面没东西是什么鬼,估计是当时注释的时候直接给删掉了,加入值后一切恢复正常

现在想想,swagger本来就是对controller的提取,没有报错就可以怀疑接口问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Springboot下swagger-ui.html访问不到的解决方案

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

本地访问不到公网redis的解决方案

目录一、目前情况二、解决方案方案一方案二 !!!(重要)容器与数据卷的对应关系1.更改容器中的Redis的配置文件2 更改服务器物理机上的redis的配置文件重新描述一下1. 服务器上的物理机 Redis2. docker 容器中的 Red
本地访问不到公网redis的解决方案
2024-08-14

访问不了阿里云BCC服务器?请查看以下解决方案

在使用阿里云BCC服务器时,可能会遇到访问不了的问题。本文将介绍几种可能的解决方案,帮助你解决问题。一、检查网络连接首先,检查你的网络连接是否正常。确保你的电脑已经连接到互联网,并且网络连接稳定。如果网络连接有问题,可能会导致你无法访问阿里云BCC服务器。二、检查服务器配置其次,检查阿里云BCC服务器的配置。确保
访问不了阿里云BCC服务器?请查看以下解决方案
2023-12-12

Vista拒绝访问提示的解决方案

这篇文章主要讲解了“Vista拒绝访问提示的解决方案”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vista拒绝访问提示的解决方案”吧!现象:运行程序时的报错提示一般为拒绝访问或需要管理权限
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录