【发布时间】:2013-12-13 15:34:40
【问题描述】:
我正在尝试使用 JSON 从应用引擎数据存储中获取数据并将其发送到 JavaScript 代码,但我制作的 JSON 似乎不支持 JSONP,因此无法检索。我正在使用 Java 和 Gson 来制作 JSON。
Java 代码:
public class outputServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query query = new Query("smsgateway");
List<Entity> from = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(10));
for (Entity sms : from){
sms.getProperty("user");
sms.getProperty("date");
sms.getProperty("content");
}
Gson gson = new Gson();
String json = gson.toJson(from);
resp.setContentType("application/json");
resp.getWriter().print(json);
}
}
我在这段代码中有什么错误吗?还是有其他方法可以制作可访问的 JSON?
--edited: 从上面的代码中我得到了这个 JSON 数组:
[{"key":{"parentKey":{"kind":"user","id":0,"name":"test 1"},"kind":"smsgateway","id":5707702298738688},"propertyMap":{"content":"test content1","date":"Dec 12, 2013 2:58:57 PM","user":"test 1"}}]
【问题讨论】:
-
您在响应中究竟得到了什么?
-
JSONP 涉及将返回的 JSON 包装到方法调用中,方法名称由调用页面提供——您的代码不会这样做。你目前如何调用这个servlet,即回调参数的名称是什么?
-
另外,你真的需要使用 JSONP 吗?这不是从远程服务器访问 JSON 的最安全方式。如果您从中调用此 servlet 的页面运行在与 servlet 相同的 host:port 上,则可以直接访问 JSON,无需 JSONP。
-
@PhilippReichart:感谢您的回复。在部署到 GAE 后,我需要将此 json 用于其他 Web 应用程序,所以基本上我将在 javascript 端使用 jsonp。但是由于访问控制问题,可以使用这个 json。我应该怎么办?我刚学了 1 个月,所以举例说明对我很有帮助。
标签: java javascript json google-app-engine