=================
== Attt's blog ==
=================
Tech otakus save the world

用Spring的URL解析工具解析带fragment的URL时异常

- Permalink

现象

用Spring的UriComponents解析带fragment的URLwww.xxxx.com/p#/f的时候报IllegalArgumentException

分析

RFC3986

UriComponents的方法fromHttpUrl(String)执行时的匹配规则是:

  • PATH部分不允许?#出现
  • ?后作为一个整体

也就是www.xxxx.com/p#/f/p被解析为了path部分,#/f是不合法的部分。

www.xxxx.com/p?#/f这种是谋梦提的,因为?#/f部分被解析为一个整体。

5.2.8之前的spring解析url的匹配规则

当然这个问题实际上是fix(enhance)了的:

ISSUE#25300:Support fragments in UriComponentsBuilder.fromHttpUrl()

5.2.8.RELEASE的spring已经将修复代码合并:

commit

解决

  1. 升级spring到5.2.8.RELEASE及以上版本
  2. fromUriString(String)替换fromHttpUrl(String),再根据schema筛选