升级 SpringBoot 2.6.x 版本后,Swagger 没法用了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了升级 SpringBoot 2.6.x 版本后,Swagger 没法用了相关的知识,希望对你有一定的参考价值。

参考技术A 首先我们来聊聊SpringBoot的版本,目前最新版本是 2.6.4 版本, 2.7.x 即将发布, 2.4.x 及以下版本已经停止维护了,目前的主流版本应该是 2.5.x 和 2.6.x 。具体可以看下下面这张表。

首先在 pom.xml 中修改SpringBoot的版本号,注意从 2.4.x 版本开始,SpringBoot就不再使用 .RELEASE 后缀了。

提到Swagger,我们一般在SpringBoot中集成的都是springfox给我们提供的工具库,看了下官网,该项目已经快两年没有发布新版本了。

再看下Maven仓库中的版本,依旧停留在之前的 3.0.0 版本。如果springfox再不出新版本的话,估计随着SpringBoot版本的更新,兼容性会越来越差的!

今天带大家体验了一把SpringBoot升级 2.6.x 版本的过程,主要解决了循环依赖和Swagger无法使用的问题,希望对大家有所帮助!

官网地址:https://github.com/springfox/springfox

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-swagger2

springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 72

1.springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本而之前用的是tomcat7    get请求报400 异常信息为 The valid characters are defined in RFC 7230 and RFC 3986

 

2.注意这里说明了,只是get请求。post的请求没问题

-------解决办法

将get请求的参数urlencode一下 

      

param = encodeURIComponent(param);

 

PS:

1.RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。

2.tomcat 8.0对URL做出了一些更严格的限制

 所以,很多get请求包含了特殊字符(请求数据格式定义的是json的(contentype/json)) 在低版本的容器是可以的且后台能够自动识别解析url的json格式数据,

      但是到了8.0及以上版本的tomcat容器后就不行了。

-----很多人尝试给tomcat降级,因为很多从jdk7升到jdk8的朋友,会为了容器校验严格的这个问题考虑使用低版本不报错的容器(8.0.2-8.0.3好像是可以)。

      但这个我认为也不是最终解决办法,两个原因:1.服务容器很难避免为了适应快速的技术发展而进行升级,只是时间问题 且进行转码也对明文信息起到了保护作用。

                                                                                  2.现在容器的api和spring的api都是自动对url进行decode,所以不用担心还要向以前一样修改后台代码.z这一点很赞。

 

------我也参考了如下朋友的帖子

http://blog.csdn.net/vickyway/article/details/46375971

以上是关于升级 SpringBoot 2.6.x 版本后,Swagger 没法用了的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot2.6.x默认禁用循环依赖后的应对策略

将 Spring Boot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar

CentOS6.4内核升级, 2.6.*版本升级 Kernel 3.10.*

升级到 Spring Boot 版本 2 后 Prometheus 无法正常工作

Spring boot:REST API 行为不一致后版本升级

springboot整合feign