用Spring的URL解析工具解析带fragment的URL时异常
现象
用Spring的UriComponents解析带fragment的URLwww.xxxx.com/p#/f
的时候报IllegalArgumentException
。
分析
- URI的组成:RFC3986
UriComponents的方法fromHttpUrl(String)
执行时的匹配规则是:
- PATH部分不允许
?
或#
出现 ?
后作为一个整体
也就是www.xxxx.com/p#/f
里/p
被解析为了path部分,#/f
是不合法的部分。
而www.xxxx.com/p?#/f
这种是谋梦提的,因为?#/f
部分被解析为一个整体。
当然这个问题实际上是fix(enhance)了的:
ISSUE#25300
:Support fragments in UriComponentsBuilder.fromHttpUrl()
5.2.8.RELEASE
的spring已经将修复代码合并:
解决
- 升级spring到5.2.8.RELEASE及以上版本
- 用
fromUriString(String)
替换fromHttpUrl(String)
,再根据schema筛选