文章目录
记录一个在实际使用过程中遇到的问题,在解析一个url格式的字符串中的域名时,直接使用下面这种姿势
1 | public static ImmutablePair</**host*/String, /**uri*/String> foramtUri(String uri) { |
正常使用上面这种进行解析,没啥问题,结果某天突然抛了个异常
1 | public static void main(String[] args) { |
直接抛出了异常
1 | Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in path at index 74: https://spring.hhui.top/spring-blog/2021/08/31/210831-SpringBoot系列之Mybatis CURD基本使用姿势-注解篇/ |
从异常提示上可以很清楚看到,根源在于非法的字符,但是从肉眼上看,并没有什么问题啊,没有什么特殊字符,也没有表情符,讲道理不应该存在问题啊
首先观察url字符串,特殊点多半在于空格了,去掉之后再试一下,发现居然成功了;
接下来问题来了,什么样的字符在通过URI.create
转换时会认为是非法的呢?
- 空格
- 引号
- 尖括号: 引号和尖括号通常用于在普通文本中起到分隔Url的作用
#
: 对于#需要注意为止,不能出现在域名中%
{}|\^[]
~`
上面这个方法的基本诉求比较简单,就是获取域名,所以可以直接解析域名的方式来解决,当然也可以针对上面的特殊字符进行替换处理来避免这个问题
从根本上来说,关键在于不要出现这种不满足uri规范的数据才是真理
一灰灰的联系方式
尽信书则不如无书,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 个人站点:https://blog.hhui.top
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
- 微信公众号:一灰灰blog