使用Java解析Facebook signed_request会返回格式错误的JSON

ama*_*ala 6 java json facebook

我正在尝试解析Java Servlet的doPost中的Facebook signed_request.我使用commons-codec-1.3的Base64解码签名的请求.这是我在servlet中使用的代码doPost

String signedRequest = (String) req.getParameter("signed_request");
String payload = signedRequest.split("[.]", 2)[1];
payload = payload.replace("-", "+").replace("_", "/").trim();
String jsonString = new String(Base64.decodeBase64(payload.getBytes()));
Run Code Online (Sandbox Code Playgroud)

当我System.out jsonString它的格式错误.有时它错过了}JSON 的结尾,有时它会"}在字符串的末尾错过.

如何从Facebook获得正确的JSON响应?

小智 7

Facebook正在使用Base64 for URL,您可能正在尝试使用标准Base64算法解码文本.除其他外,URL变体不需要填充"=".

  1. 你可以在代码中添加所需的字符(填充等)
  2. 你可以使用commons-codec 1.5(new Base64(true)),在那里他们添加了对这种编码的支持.