我正在努力理解URIComponentsBuilder
的行为。我想用它来编码查询参数中的URL,但它似乎只转义%
字符,而不转义其他必要的字符,如&
。
查询参数中根本没有编码的URL示例:
UriComponentsBuilder.fromUri("http://example.com/endpoint")
.queryParam("query", "/path?foo=foo&bar=bar")
.build();
输出:http://example.com/endpoint?query=/path?foo=foo&bar=bar
这是不正确的,因为未编码的&
会导致bar=bar
被解释为/endpoint
而不是/path
的查询参数。
但是,如果使用包含%
字符的输入::
UriComponentsBuilder.fromUri("http://example.com/endpoint")
.queryParam("query", "/path?foo=%20bar")
.build();
输出:http://example.com/endpoint?query=/path?foo=%2520bar
%
字符被转义。
URIComponentsBuilder
自动转义%
字符,但不转义其他保留字符,这似乎不一致。
使用URIComponentsBuilder
将URL编码为查询参数的正确过程是什么?
在您的示例中,builduricomponents
对象没有编码或规范化。要确保应用编码:
>
通过调用encode()
方法(另请参阅normalize()
方法)对其进行编码:
UriComponents u = UriComponentsBuilder.fromHttpUrl("http://example.com/endpoint")
.queryParam("query", "/path?foo=foo&bar=bar")
.build()
.encode();
// http://example.com/endpoint?query=/path?foo%3Dfoo%26bar%3Dbar
如果用于构造uricomponents
的参数已经编码,请使用build(true)
方法
UriComponents u = UriComponentsBuilder.fromHttpUrl("http://example.com/endpoint")
.queryParam("query", "/path?foo=foo&bar=bar")
.build(true);
// IllegalArgumentException: Invalid character '=' for QUERY_PARAM in "/path?foo=foo&bar=bar"
在hoodHierarchicalUricomponents.encode(String)
方法下执行实际的编码。在几次内部调用之后,它调用HierarchicalUricomponents.EncodeBytes(Byte[],HierarchicalUricomponents.Type)
,其中HierarchicalUricomponents.Type
枚举控制URL的哪个部分中允许使用哪些字符。此检查基于RFC 3986。简而言之,spring对URL的每一部分都有自己的编码逻辑。
问题内容: 我正在尝试使用spring的UriComponentsBuilder为oauth交互生成一些url。查询参数包括诸如回调URL和其中带有空格的参数值之类的实体。 尝试使用UriComponentBuilder(因为现在已弃用UriUtils) 不幸的是,虽然scope参数中的空格已成功用’+’替换,但redirect_uri参数根本没有经过url编码。 例如, 应该已经结束了 但是没有
问题内容: 我有下面的代码(我包括了我认为所有相关的部分): 运行此命令时,在添加第一个参数时会收到IndexOutOfBoundsException。我做错了什么? 问题答案: 尝试以下方法:
我是新来的Node.js,并试图检查如果电子邮件已经通过发送电子邮件作为一个url参数从iOS应用程序。它不起作用,不确定我做错了什么。 我无法console.log前端发送的VSCode中的电子邮件参数,它在XCODE(http://localhost:3000/api/user/email/test@gmail.com)中打印,我知道后端正在获取GET请求。 我的路由器代码是: 非常感谢。
问题内容: 我正在使用psql在Postgres中查询数据库。我使用以下查询来搜索一个名为 tag 的字段,该字段的数据类型为文本数组: 现在,我需要创建一个查询,以在 标签 字段中搜索以字母“ A”开头的任何单词。我尝试了以下方法: 这给了我一个语法错误。关于如何将LIKE与文本数组结合使用的任何建议? 问题答案: 使用函数将数组转换为行集: 本应算唯一条目表,只需更换你的主键的名称。 话虽这么
问题内容: 我已经尝试按照PHP.net说明进行查询,但是我不确定执行此操作的最佳方法。 如果可能,我想使用参数化查询来返回表中字段与参数匹配的表。这将返回一个,因为它将是唯一的。 然后,我想将其用于另一个表中,因此我将需要确定它是否成功。 我还读到您可以准备查询以供重用,但是我不确定这有什么帮助。 问题答案: 您选择像这样的数据: 您以相同的方式插入: 我建议您将PDO配置为在出错时引发异常。如
问题内容: 如何在Java中将查询参数编码为URL?我知道,这似乎是一个显而易见且已经提出的问题。 我不确定有两个微妙之处: 网址上的空格应该编码为“ +”还是“%20”?在chrome中,如果我输入“ http://google.com/foo=?bar me”,则chrome会将其更改为使用%20进行编码 是否有必要/正确将冒号“:”编码为%3B?Chrome没有。 笔记: 似乎不起作用,似乎