客观化负载组,不过滤Ref <>数据

时间:2018-11-12 18:53:24

标签: java google-cloud-endpoints objectify

我正在将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对象层次结构仍在加载的任何见解,都值得赞赏。

0 个答案:

没有答案