gpt4 book ai didi

java - UriBuilder 中大括号和空格的编码问题

转载 作者:行者123 更新时间:2023-11-30 05:54:23 31 4
gpt4 key购买 nike

我正在使用 UriBuildercom.sun.jersey.api.uri.UriBuilderImpl 实现来编码 URL(版本 1.19)。当我的 URL 的查询参数同时包含大括号和空格时,就会出现问题。

示例:

UriBuilder uriBuilder = fromUri("www.something.com")
.queryParam("q", "{some thing}");

return uriBuilder.build().toString();

此操作失败:

javax.ws.rs.core.UriBuilderException: java.net.URISyntaxException: Illegal character in query at index 27: www.something.com?q=%7Bsome thing%7D

这很有趣,就好像我去掉大括号一样,我得到了预期的编码:www.something.com?q=some+thing...

org.apache.http.client.utils.URIBuilder 按照我的预期对其进行编码,即:www.something.com?q=%7Bsome+thing%7D

我尝试过这样做:

...
.queryParam("q", UriComponent.encode(searchQuery, UriComponent.Type.QUERY_PARAM)).
.build();

但是空格字符也会被编码为 www.something.com?q=%7Bsome%2Bthing%7D

我需要做什么才能获取 www.something.com?q=%7Bsome+thing%7D

最佳答案

我正在使用 jersey-client v1.9.1 并且您的代码运行没有错误。

这是我的 Maven 依赖项:

<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.9.1</version>
</dependency>

以及java代码:

import java.net.URI;

import javax.ws.rs.core.UriBuilder;

public class Main {
public static void main(String[] args) throws Exception {
try {
URI url = UriBuilder.fromUri("www.something.com")
.queryParam("q", "{some thing}")
.build();
System.out.println(url);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

输出:www.something.com?q=%7Bsome+thing%7D

更新

大括号是 v1.19 失败的原因(请参阅 the documentation )

这是 v1.19 的工作版本:

        URI url = UriBuilder.fromPath("www.something.com")
.queryParam("q", "{value}")
.build("{some thing}", "value");
System.out.println(url);

关于java - UriBuilder 中大括号和空格的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53435493/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com