Android Google应用程序引擎使用JSON发送太多数据

Android Google应用程序引擎使用JSON发送太多数据,android,json,google-app-engine,Android,Json,Google App Engine,我使用数据存储创建了一个带有GAE和云端点的非常简单的API。我制作了一个名为Book的实体,其中包含一些属性(大多数是字符串),并部署了应用程序 我的GET和POST请求工作正常,但我不明白为什么每次我执行GET请求以检索数据存储中的实体时,JSON中都会有一行额外的内容,例如: { "id": "5634482569460976", "date": "20141125", "author": "Charly", "kind":

我使用数据存储创建了一个带有GAE和云端点的非常简单的API。我制作了一个名为Book的实体,其中包含一些属性(大多数是字符串),并部署了应用程序

我的GET和POST请求工作正常,但我不明白为什么每次我执行GET请求以检索数据存储中的实体时,JSON中都会有一行额外的内容,例如:

{
        "id": "5634482569460976",
        "date": "20141125",
        "author": "Charly",
        "kind": "bookendpoint#resourcesItem"
    }
我从来没有在我的实体中设置“种类”属性,这是从哪里来的? 此外,在每个json响应的末尾,我可以找到以下两行:

"kind": "bookendpoint#resources",
"etag": "\"dIDB-NLukmBT86-tBYjgZpbt2_Y/FcVIa289PJU7Cjr-bG8b0oxmfrKQ\""
我也不知道那些“善良”和“爱塔”是从哪里来的


您能告诉我这些是什么以及如何防止它们出现在JSON响应中吗?

这两个属性都是由云端点自动添加的。我不知道如何删除它,谷歌似乎也没有记录为什么要添加它们,但有些很容易猜测

种类字段

kind
向Android客户端指示如何序列化(从JSON文本转换为Java对象)数据。这在多态性发挥作用时非常有用。例如,假设您将从端点返回此类:

public class Library {
  public List<Item> items;
}

public interface Item{
  private String title;
}

public class Book extends Item {
}

public class Magazine extends Item {
}
那么客户如何知道哪一项是
书籍
,哪一项是
杂志
?这些类在客户端可能有完全不同的行为,因此了解它们很重要

但是如果添加
种类
字段,序列化程序将能够选择正确的
实现:

{
  "kind": "bookendpoint#Library"
  "items": [
           {"title":"My book","kind": "bookendpoint#Book"},
           {"title":"My magazine","kind": "bookendpoint#Magazine"},
      ]
}
etag
字段中

这个对我来说有点神秘。在HTTP协议中,ETag是资源的某种哈希,用于在客户端缓存资源,并避免在资源未更改时再次下载资源

通常,服务器在为资源提供服务时会提供一个ETag,然后客户端会询问“给我该资源,除非ETag XXX仍然有效”。仍然涉及HTTP请求,但不需要下载,除非服务器端的资源已更改

您可以在上阅读更多关于ETags的信息


ETag对于云端点非常有用。我猜云端点会计算它想要返回的响应的一些散列。如果此响应与云端点客户端提供的
etag
字段匹配,则不会返回任何数据,而是发送
http304 Not Modified
响应。

您找到如何删除这些标记了吗?
{
  "kind": "bookendpoint#Library"
  "items": [
           {"title":"My book","kind": "bookendpoint#Book"},
           {"title":"My magazine","kind": "bookendpoint#Magazine"},
      ]
}