Open banmao999 opened 1 year ago
另外在 SpringBoot 3.0.4 中修复这个BUG的方式,虽然也是通过 URLDecoder.decode
进行解码,但是在解码之前他先将路径中的空格替换为 %20
字符,这个行为我不理解,为什么需要这一步,想请教下大佬有没有思路?
源码定位:org.springframework.core.io.support.PathMatchingResourcePatternResolver#convertClassLoaderURL
@banmao999 chatGPT的回答:
在 URI 中,空格是一个不允许出现的字符,它在 URI 解析时会被解释为 URI 的结束符或分隔符,这可能会导致 URI 解析错误。 为了避免这种错误,URI 规范定义了一些保留字符(如 "%20")作为代替空格的转义字符,它们表示特定的字符或符号,使得它们在 URI 中具有特殊的含义而不被解释为结束符或分隔符。 因此,将空格替换为 "%20" 是将字符串转换为有效的 URI 格式的必要步骤,以确保 URI 的正确解析和处理。如果不替换空格或使用其他合适的转义字符,则可能会导致 URI 不被正确解析和处理。
这个bug不修了,就这样吧
感谢大佬的分享,源码看得头疼,这个简易的项目更方便分析流程
不过有个小问题,这个问题与 SpringBoot 3.0.3 版本中的BUG类似,都是路径中存在空格等字符,经过
classLoader.getResource
方法后变成了Unicode编码SpringBoot仓库对应Issue:https://github.com/spring-projects/spring-boot/issues/34379
在本项目中对应的位置:
com.mafei.spring.MaFeiApplicationContext#scanBeanDefinition