java - 如何处理 Java 字符串中的 & 符号并将 URL 作为查询参数值发送?

标签 java facebook facebook-graph-api

我尝试通过以下方式从 Java 代码调用 URL:

userId = "Ankur";
template = "HelloAnkur";
value= "ParamValue";
String urlString = "https://graph.facebook.com/" + userId + "/notifications?template=" +
    template + "&href=processThis.jsp?param=" + value + "&access_token=abc123";

我在这方面遇到以下问题:

  1. 当我执行 println(urlString) 时,我发现 urlString 仅具有第一个与号 (&) 之前的值。也就是说,它看起来像: https://graph.facebook.com/Ankur/notifications?template=HelloAnkur 以及其余部分(应该是 &href=processThis.jsp? param=ParamValue&access_toke=abc123) 被切断。这是为什么?如何获取并保留 urlString 中的完整值? Java 字符串中的 & 是否需要转义?如果需要,该怎么做?
  2. 请注意,我尝试在此查询中传递一个(相对)URL 作为参数值(href 的值为 processThis.jsp?param=ParamValue。如何传递这种类型的 href 值而不将其与此 URL (urlString) 的查询混合,该 URL 只有三个参数 template >、hrefaccess_token?即如何 Conceal 或转义=?进一步,什么如果valueParam Value(带空格),我需要做什么?
  3. 请注意,template 的值为 HelloAnkur(不含空格)。但如果我希望它有空间,就像 Hello Ankur 中那样,我该怎么做呢?我应该把它写成 Hello%20Ankur 还是 Hello Ankur 就可以了?
  4. 我需要这样的解决方案:可以创建 URL url = new URL(urlString),或者可以通过 URI 创建 url.请描述到目前为止您的答案,因为在 Java 中创建安全 URL 并不简单。

谢谢!

最佳答案

(这将成为经典)

使用 URI 模板 (RFC 6570)。使用this implementation (免责声明:我的),您可以完全避免所有编码问题:

// Immutable, can be reused as many times as you wish
final URITemplate template = new URITemplate("https://graph.facebook.com/{userId}"
    + "/notifications?template={template}"
    + "&href=processThis.jsp?param={value}"
    + "&access_token=abc123");

final Map<String, VariableValue> vars = new HashMap<String, VariableValue>();

vars.put("userId", new ScalarValue("Ankur"));
vars.put("template", new ScalarValue("HelloAnkur"));
vars.put("value", new ScalarValue("ParamValue");

// Build the expanded string
final String expanded = template.expand(vars);

// Go with the string

请注意,URI 模板不仅允许标量值,还允许数组(RFC 称之为“列表”——在上面实现为 ListValue)和映射(RFC 称之为“关联数组”) "-- 在上面实现为 MapValue)。

关于java - 如何处理 Java 字符串中的 & 符号并将 URL 作为查询参数值发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16967161/

相关文章:

php - Facebook SDK v4 和 Graph Api 2.x 在粉丝页面墙中自动发布

java - AlarmManager 不准确

java - 如何检测屏幕切口(凹口)并获取其高度?

java - Facebook Messenger 不发送消息

c# - Asp.net web 表单、Asp Identity - 如何存储来自 Facebook、Twitter 等的声明

facebook - 在 Facebook 上获取 friend 的 friend 列表

facebook-graph-api - 如何使用Flask从FB检索人的头像?

java - 扩展类中的 "super of super"(父类(super class)的父类(super class)中的更改变量)

java - 如何区分一个pom.xml中的不同wsdl位置-Maven

ios - Firebase signInWithCredential 使用 Facebook SDK 给出错误