问题:

做项目的时候和对接方联调的时候,对接方会传入一个url给我们,然后经过一系列的操作之后,我们会将一些参数返回到该url上,回调给对接方.然而当使用了getParameter获取传入的url的时候发现,获取的url并不是对接方传入的完整的url.
例子:对接方传入url=http://abc.com/#/result/success这样类似的url,我们返回的是http://abc.com/?我方参数a=1&b=2/#/result/success,导致无法达到预期的效果.

原因:

使用了HttpServletRequest下面的getParameter()方法,getParameter(“url”)获取到的url将”#”后面的内容全部忽略了.然后加上了我方参数,所以最后返回的时候我方参数是在#/result/success的前面.

验证过程:

1.getParameter()不存在#号的实验:
url: http://localhost:8090/testGetParam?url=http://abc.com
结果:
HttpServletRequest的getParameter()的坑
2.getParameter()存在#号的实验
url: http://localhost:8090/testGetParam?url=http://abc.com/#/index.html
结果:
HttpServletRequest的getParameter()的坑

结论和解决方式:

1.有#号和没有#号的结果返回一模一样,因为getParameter()底层把遇到以后#后面的(包括#号自身),全部给忽略掉了,所以导致getParameter时,带有#的内容显示不出来;(具体原理后面加文章分析)
2.解决的方式就是采用urlencode,现将url中的#号传入的时候,进行转码,要使用的时候在进行urldecode,就可以了.

相关文章:

  • 2021-11-21
  • 2021-11-21
  • 2021-11-21
  • 2021-11-21
  • 2021-11-21
  • 2021-12-14
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案