1

我的应用程序中有一个实体关系,使用 @Parent 注释来形成实体组。

https://code.google.com/p/objectify-appengine/wiki/Entities#@Parent_Relationships

import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Parent;

@Entity
public class Person {
    @Id Long id;
    String name;
}

@Entity
public class Car {
    @Parent Key<Person> owner;
    @Id Long id;
    String color;
}

我正在使用 Google Cloud Endpoints 创建 RESTFul 服务。我想在我的资源中创建一个 GET,它不仅为父级而且为整个实体组返回 JSON。有什么好方法可以做到这一点?

我现在拥有的是这个……

@ApiMethod(
    name = "persons.get",
    httpMethod = HttpMethod.GET,
    path = "persons/{id}"
 )
public Person get(@Named("id") String webSafeKey) {

    Key<Person> key = Key.create(webSafeKey);
    Person person= ofy().load().key(key).safe();

    return person;

}

这将返回人员的 JSON,但是如果我想包含人员汽车的 JSON,该怎么办。可能类似于 person 对象中的 getter 和 setter getCars()。我想知道是否有更好的东西。

- 更新 -

此外,似乎没有一种好方法可以返回 getter 和 setter 中的对象,这些对象既不是文字也不是在没有适配器的情况下转换为 JSON。

4

2 回答 2

1

在人对象中拥有汽车 ID 并在加载人对象时加载它怎么样。

@Entity
public class Person {
    @Id Long id;
    String name;
    Ref<Car> car;
}

@Entity
public class Car {
    @Parent Key<Person> owner;
    @Id Long id;
    String color;
}
public Person get(@Named("id") String webSafeKey) {

    Key<Person> key = Key.create(webSafeKey);
    Person person= ofy().load().key(key).safe();
    return person;

}

而从人对象,你可以通过

Car car = person.car.get();
于 2013-11-14T09:33:01.290 回答
0

就个人而言,我发现端点的做事方式只让我到目前为止。我还需要一种发送/接收任意实体组的方法。因此,我创建了一对端点来发送/接收这样的类:

public class DataParcel implements Serializable {
  public Integer operation = -1;
  private static final long serialVersionUID = 1L;
  public List<String> objects = null;   // new ArrayList<String>();
}

这些对象是我的任何实体的 JSON 化实例。因此,对于您的情况,您的“获取”方法可能会返回一个 DataParcel;您的实现会将 Person 和任意数量的 Cars 加载到 DataParcel 实例中并将其返回给客户端。

(Serializable 与您的问题无关 - 它允许我将其放入 TaskQueue 以供以后处理。)

于 2013-11-12T15:48:38.547 回答