我正在将Google Cloud Endpoints与Objectify一起使用来为我的移动应用程序创建Java后端。一切工作都很好,除了即使使用Objectify负载组也返回了完整的JSON树。例如,树的子集包括一个具有地址和楼层列表的Building类:
public class Building {
@Load(Everything.class)
private Ref<Address> address;
@Load(Lite.class})
private List<Ref<Floor>> floors = new ArrayList<Ref<Floor>>();
public Address getAddress() {
return Deref.deref(address);
}
public List<Floor> getFloors() {
return Deref.deref(floors);
}
}
public class BuildingEndpoint {
@ApiMethod(name = "building.getLite", path = "building_get_lite")
public Building getLite(@Named("id") Long id) {
Building building = ofy().load().group(Lite.class).type(Building.class).id(id).now();
return building;
}
}
根据Objectify文档,应该加载地址,而不是地板,但是,所有内容都正在加载(以及地板的子类,一直到对象层次结构中)。
以防万一Deref是问题,我在这里包括它:
public class Deref {
public static class Func<T> implements Function<Ref<T>, T> {
public static Func<Object> INSTANCE = new Func<Object>();
@Override
public T apply(Ref<T> ref) {
return deref(ref);
}
}
public static <T> T deref(Ref<T> ref) {
return ref == null ? null : ref.get();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static <T> List<T> deref(List<Ref<T>> reflist) {
return Lists.transform(reflist, (Func)Func.INSTANCE);
}
}
对于为什么加载组不起作用以及FULL对象层次结构仍在加载的任何见解,都值得赞赏。