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

Sat*_*dev 3 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 #.根据官方文件,fragment()必须使用一种方法来保持未编码.

URI的大多数组件都允许使用URI模板,但它们的值仅限于特定组件.例如

.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

wer*_*ero 5

使用片段构造URI

UriBuilder.fromPath("http://localhost:7070/RTH_Sample14/").fragment("Login").build()
Run Code Online (Sandbox Code Playgroud)

这会产生URI字符串

http://localhost:7070/RTH_Sample14/#Login
Run Code Online (Sandbox Code Playgroud)

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

UriBuilder.fromPath("http://localhost:7070/RTH_Sample14/").fragment("Login")
          .queryParam("token", "t").build()
Run Code Online (Sandbox Code Playgroud)

然后UriBuilder始终在片段之前插入查询参数:

http://localhost:7070/RTH_Sample14/?token=t#Login
Run Code Online (Sandbox Code Playgroud)

它只是符合URL语法.