如何在不编码哈希的情况下使用 URIbuilder 构建 URI



我有一个这样的URI:

java.net.URI location = UriBuilder.fromPath("../#/Login").queryParam("token", token).build();

我将其作为响应发送:return Response.seeOther(location).build()

但是,在上述 URI 中,# 被编码为 %23/ 。如何在不对哈希#进行编码的情况下创建 URI。根据官方文件,必须使用fragment()方法来保持未编码。

URI

模板在 URI 的大多数组件中是允许的,但它们的值 仅限于特定组件。例如

UriBuilder.fromPath("{arg1}").build("foo#bar"); 将导致 对"#"进行编码,使得生成的 URI 为"foo%23bar"。自 创建 URI "foo#bar" 使用 UriBuilder.fromPath("{arg1}").fragment("{arg2}").build("foo", "bar") 代替.

查看文档中的示例,我不确定如何在我的情况下应用它。

最终的 URI 应如下所示:

http://localhost:7070/RTH_Sample14/#Login?token=eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvcnRoLmNvbSIsInN1YiI6IlJUSCIsInJvbGUiOiJVU0VSIiwiZXhwIjoxNDU2Mzk4MTk1LCJlbWFpbCI6Imtpcml0aS5rOTk5QGdtYWlsLmNvbSJ9.H3d-8sy1N-VwP5VvFl1q3nhltA-htPI4ilKXuuLhprxMfIx2AmZZqfVRUPR_tTovDEbD8Gd1alIXQBA-qxPBcxR9VHLsGmTIWUAbxbyrtHMzlU51nzuhb7-jXQUVIcL3OLu9Gcssr2oRq9jTHWV2YO7eRfPmHHmxzdERtgtp348

使用片段构造 URI

UriBuilder.fromPath("http://localhost:7070/RTH_Sample14/").fragment("Login").build()

这将产生 URI 字符串

http://localhost:7070/RTH_Sample14/#Login

但是,如果您还添加了查询参数

UriBuilder.fromPath("http://localhost:7070/RTH_Sample14/").fragment("Login")
          .queryParam("token", "t").build()

然后UriBuilder总是在片段之前插入查询参数:

http://localhost:7070/RTH_Sample14/?token=t#Login

它只是符合 URL 语法。

而不是在不对哈希值进行编码的情况下重定向的所有麻烦。我将代码更改为以下内容:

java.net.URI location = new java.net.URI("../#/Login?token=" + token);

因此,上面的查询参数是令牌附加到 URI 位置。在前端,我正在使用 angular 的location.search().token来捕获查询参数。

这对我有用。不过,寻找更好的答案。谢谢

相关内容

  • 没有找到相关文章

最新更新