【发布时间】:2015-06-26 09:10:38
【问题描述】:
此 API 的目的是列出某个 User 电子邮件地址拥有的所有服务器。
如果我删除过滤器,则该方法会返回所有服务器(如预期的那样)。问题是我需要按特定的电子邮件地址进行过滤,该地址只会返回如下结果:
{
"kind": "serverApi#resources",
"etag": "\"q4aBTdWQBYSnhbijLrKGtcu63OU/cXL3GSvQ29gE3tK-4VKxQrWjAt0\""
}
我期待的结果类似于:
{
"items": [
{
"id": "1",
"hostname": "aaa",
"ip": "192.168.1.2",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
},
{
"id": "2",
"hostname": "bbb",
"ip": "192.168.1.1",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
},
{
"id": "3",
"hostname": "ccc",
"ip": "192.168.1.3",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
},
{
"id": "4",
"hostname": "ddd",
"ip": "192.168.1.4",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
}
],
"kind": "serverApi#resources",
"etag": "\"q4aBTdWQBYSnhbijLrKGtcu63OU/cXL3GSvQ29gE3tK-4VKxQrWjAt0\""
}
我在 Endpoint 上使用的代码。
public CollectionResponse<Server> listServerByUser(User user) throws OAuthRequestException {
List<Server> records = new ArrayList<Server>();
Query<Server> query = ofy().load().type(Server.class).filter("mUser", user.getEmail());
QueryResultIterator<Server> iterator = query.iterator();
while (iterator.hasNext()) {
records.add(iterator.next());
}
return CollectionResponse.<Server>builder().setItems(records).build();
}
AppEngine 仪表板上Datastore Viewer 中显示的列:
ID/NamemDomainmHostnamemIpmMacmUser
【问题讨论】:
-
不清楚问题出在哪里:您没有得到您期望的所有记录,或者记录返回的数据与您期望的不同。请澄清一下。
-
我预计会收到 4 个结果。电子邮件地址匹配。
-
我看到您实际上是在使用 Objectify,并且您使用的字符串格式是正确的 [1](没有运算符意味着等于)。也许您正在过滤错误的属性(如果 'mUser' 是 'user' 而不是?)或 user.getEmail() 没有返回您认为的内容? [1]docs.objectify-appengine.googlecode.com/git/apidocs/com/…,java.lang.Object)
标签: google-app-engine google-cloud-endpoints google-cloud-datastore objectify