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

标签 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。根据official document ,必须使用 fragment() 方法来保持未编码。

URI templates are allowed in most components of a URI but their value is restricted to a particular component. E.g.

UriBuilder.fromPath("{arg1}").build("foo#bar"); would result in encoding of the '#' such that the resulting URI is "foo%23bar". To create a URI "foo#bar" use UriBuilder.fromPath("{arg1}").fragment("{arg2}").build("foo", "bar") instead.

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

最终的 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 - 如何在不编码哈希的情况下使用 URIbuilder 构建 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35627168/

相关文章:

java - Spring MVC、Spring Data JPA、Spring Security 集成

java - Hive Driver Connection 线上的 Hadoop 中的 ClassNotFoundException 引起的 NoClassDefFoundError?

java spring rest参数不起作用

asp.net - REST 服务的成员资格/授权

java - 在 REST POST 调用期间未从继承对象获取所有属性

java - 如何使用 JAX-RS 从 header "accept-language"注入(inject)区域设置列表?

java - 在 .jar 中使用 grizzly 的 StaticHttpHandler 提供静态内容

java - 正则表达式 - 如何识别字符串 + 空格 + 字符串

java - 在 JAXRS 中,仅将容器请求拦截器应用于特定提供者

java - 初始化读取器在 Spring 批处理中的一步失败