如何使用URIbuilder构建URI而不编码哈希

时间:2016-02-25 12:21:54

标签: java rest jax-rs uribuilder

我有这样的URI:

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

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

但是,在上面的URI中,#被编码为%23/。如何创建一个不对哈希值#进行编码的URI。根据{{​​3}},必须使用fragment()方法来保持未编码。

  

URI的大部分组件都允许使用URI模板,但是它们的值   仅限于特定组件。 E.g。

     
    。

UriBuilder.fromPath( “{ARG1}”)建立( “富#栏”);会导致     编码'#',使得结果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

2 个答案:

答案 0 :(得分:5)

使用片段使用构建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语法。

答案 1 :(得分:2)

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

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

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

这对我有用。寻找更好的答案。感谢