简单的 GAE Java JSON REST 服务器

Posted

技术标签:

【中文标题】简单的 GAE Java JSON REST 服务器【英文标题】:Simple GAE Java JSON REST Server 【发布时间】:2011-11-11 02:22:30 【问题描述】:

我是 GAE、JSON、REST 和一般网络的新手。我有一个非常简单的 GWT/GAE 数据存储,我想用它来更新我编写的 android 应用程序中的数据。经过一些研究,似乎一个好方法是创建一个 RESTful Web 服务,我的 Android 应用程序将通过发送回 JSON 格式数据的 HTTP 请求访问。

我一直在寻找一种方法来做到这一点,似乎有很多方法,主要是使用 3rd 方库。有这么多,作为初学者很难明智地选择。此外,我的问题非常简单,这将是学习在 GAE 上创建 RESTful Web 服务和 JSON 的基础知识的好机会。它需要做的就是从 URL 返回 JSON 数据——不创建、不更新、不删除。

我想一个简单的 Java 代码示例或教程比学习一个复杂的库更能实现我的目标。有谁知道一个简单的示例或教程可以向我发送正确的方向?

谢谢。

请不要打蛇

== 更新:

在来自向导的 GreetingServiceImpl 的 doGet @Override 中,我添加了:

// super.doGet(req, resp);
PrintWriter out = resp.getWriter();
out.println("Hello World");

这似乎有效。会不会这么简单?我可以修改此代码以生成 JSON 输出来代替“Hello World”字符串吗?

【问题讨论】:

【参考方案1】:

你的问题有点笼统(无意冒犯),所以我的回答也很笼统。尽管我的回答很笼统,但这些信息应该能让你指向正确的方向。如果您的问题变得更具体,请编辑您的原始问题或询问另一个问题是否足够具体。

我想说最简单的方法是获取 Eclipse,并使用 GAE Eclipse 插件(如果您还没有的话)。

按照此处的说明安装、创建和运行项目:

http://code.google.com/appengine/docs/java/tools/eclipse.html

完成所有这些后,在您的 servlet 中重写 doGet 方法以使用您必须访问数据存储区的任何代码。一旦你有了想要从数据存储中获取对象的代码,我将使用 GSON 将生成的对象序列化为 JSON。 http://code.google.com/p/google-gson/

同样,这并不是您需要的全部信息。随意编辑您的问题或评论,并要求提供更具体的信息。此外,您提到您也一直在寻找其他 3rd 方库来执行此操作。这里要小心。您必须记住,如果您使用的是谷歌应用引擎,那么在您部署它时可能无法在本地运行的东西。这有点不方便,但它允许谷歌简化应用程序引擎并提供尽可能多的免费托管服务。有一个已在 Java 应用引擎环境中经过实战测试的 3rd 方库列表;但我无法通过粗略的谷歌搜索找到它。我知道它在应用引擎文档中的某个地方。而且,为了它的价值,我在应用引擎中对 GSON 进行了一次小型冒烟测试,它似乎工作正常。

【讨论】:

谢谢。我一直在使用 Eclipse。在向导生成的代码中,我看到: public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException ... 这就是你所说的“重写 doGet”吗? 我添加了 // super.doGet(req, resp); PrintWriter out = resp.getWriter(); out.println("Hello World"); 是的,我的问题在某些方面很笼统,但在其他方面非常具体。我正在寻找一个非常具体的示例或教程。但是,一般情况下,也欢迎就可行的方法提出建议。 这个 doGet 看起来很有希望,但在将其标记为已回答之前,我将等待一些测试和对上述添加的反馈。无论如何,谢谢!!!这看起来像我认为应该存在的简单答案。希望当我最终到达那里时这不是海市蜃楼。 :) Can I just modify this code to generate my JSON output in place of the "Hello World" string and I'm done? 这个问题的答案基本上是肯定的。但请确保将您的响应类型设置为 json。为此,只需在刷新或关闭响应之前执行 resp.setContentType("application/json");【参考方案2】:

尝试使用 JSONEngine - 此库创建易于访问的 JSON API,用于在 Google App Engine 中存储/检索/更新/删除 JSON 数据。可以将每个 JSON 文档的访问权限设置为特定用户/仅限 google 电子邮件 ID/仅限打开 id 电子邮件 ID(如 Google/Yahoo/AOL)...

在 code.google.com/p/jsonengine/ 上阅读有关此库的更多信息

【讨论】:

【参考方案3】:

尝试新的Google Cloud Endpoints。它们仍处于试验阶段,但据我尝试,它们运行良好。

此外,它们非常易于用于您定义的简单目的。如果您使用的是 Google Eclipse 插件,您只需创建一个 JDO 持久类,插件会自动为您生成端点。请参阅 Google Eclipse 插件对 Google CLoud Endpoints 的支持here

【讨论】:

【参考方案4】:

试试泽西!

http://jersey.java.net/

【讨论】:

以上是关于简单的 GAE Java JSON REST 服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 GAE 服务帐户 JSON 密钥

无法使用 Spring Boot Rest 服务将 JSON 转换为 Java 对象

解析 POST json 消息 Django/GAE 的问题

如何减少 GAE 启动的前端实例数量?

python gae-init rest api arguments as query params。

Google App Engine Datastore 集成测试