我使用mirror api开发了一个谷歌眼镜应用程序。在开发期间,我使用“Introspected tunnels to localhost”来接收通知。
现在我在生产服务器上上传了我的应用程序。现在我将我的回调网址配置为我的域名,例如 https://www.mydomain.com:8443/notify 。但我得到空的通知。
在notify servlet中:
BufferedReader notificationReader = new BufferedReader(
new InputStreamReader(request.getInputStream()));
String notificationString = "";
int lines = 0;
while (notificationReader.ready()) {
notificationString += notificationReader.readLine();
lines++;
if (lines > 1000) {
throw new IOException(
"Attempted to parse notification payload that was unexpectedly long.");
}
}
LOG.info("\ngot raw notification : " + notificationString);
in catalina.out
Feb 13, 2014 12:51:48 PM com.google.glassware.NotifyServlet doPost
INFO: got raw notification :
我该如何解决?
答案 0 :(得分:1)
StringBuffer stringBuffer = new StringBuffer();
String line = "";
BufferedReader bufferReader = new BufferedReader(
new InputStreamReader(request.getInputStream()));
while ((line = bufferReader.readLine()) != null) {
stringBuffer.append(line);
}
notificationString = stringBuffer.toString();
希望它能奏效。
答案 1 :(得分:0)
我认为您应该使用readLine()
方法。stack overflow的答案之一建议不要使用ready()来满足此类要求。
ready方法告诉我们Stream是否准备好被读取。 想象一下,您的流正在从网络套接字读取数据。在这 情况下,流可能没有结束,因为套接字还没有 关闭,但它可能还没有为下一个数据块做好准备,因为 套接字的另一端没有再推送任何数据。
在上面的场景中,我们无法再读取远程数据 结束推送它,所以我们必须等待数据变得可用,或者 要关闭套接字。 ready()方法告诉我们数据的时间 是可用的。
答案 2 :(得分:0)
我遇到了同样的问题,我将代码更改为:
StringBuffer jb = new StringBuffer();
String notificationString = "";
String line = "";
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null) {
jb.append(line);
}
notificationString = jb.toString();
答案 3 :(得分:0)
试试这个:
while(notificationReader.ready()) {
notificationString = notificationString.concat(notificationReader.readLine());
lines++;
}