gpt4 book ai didi

java - 对象化后端和客户端之间的 Key/Ref 往返 [无 GWT]

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:26 27 4
gpt4 key购买 nike

这里和网络上有很多文章,但这些文章都针对不同的 Objectify 版本,并且由于某种原因似乎不起作用。

我有一个实体,它引用另一个实体(例如,帐户实体引用用户实体):

@Cache
@Entity
public final class Account {

@Id Long id;
@Index private Ref<User> user;

public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}

public User getUser() {
return user.get();
}
public void setUser(User user) {
this.user = Ref.create(user);
}

}

我正在尝试这样做:

  1. 从客户端通过 REST/Google Cloud Endpoints 获取帐户实体。
  2. 修改资源。
  3. 在服务器上更新它。

如此处所述 Objectify loads object behind Ref<?> even when @Load is not specified上面的代码也总是返回引用的用户,这是我不想要的。

正如 @svpino 建议的那样,一个选项是“让您的 @ApiMethod 返回一个不带用户属性的不同 Account 对象(从而避免在不需要时获取用户)。”只要我不想更新资源,这就有效。如果我需要更新,则需要保留 key /引用(即使我在客户端上不需要它)。

我看到的一种可能的方法是使用 Key 而不是 Ref 并呈现网络安全字符串,然后在更新期间重新创建用户。

private Key<User> user;

public String getUser() {
return user.toString();
}
public void setUser(String user) {
this.user = Key.create(user);
}

该字符串看起来像“Key(User(5723348596162560))”,但它似乎没有被重构(至少我在这里得到一个异常,还没有追踪到它)。

另一种方法是编写一个@ApiTransformer,但这也没有解决问题。

Jeff @StickFigure 在过去几年中多次发帖,但问题似乎仍然没有得到解决。

Objectify 5.0.2 的当前状态如何?当客户端不需要 key 时,在往返之间保留 key 的建议是什么?

最佳答案

您需要使用 @ApiResourceProperty(ignored = AnnotationBoolean.TRUE) 注释要省略的属性

Google 文档对 @ApiResourceProperty 进行了如下说明:

@ApiResourceProperty provides provides more control over how resource properties are exposed in the API. You can use it on a property getter or setter to omit the property from an API resource. You can also use it on the field itself, if the field is private, to expose it in the API. You can also use this annotation to change the name of a property in an API resource.

我鼓励您访问此链接阅读更多内容 https://developers.google.com/appengine/docs/java/endpoints/annotations#apiresourceproperty

因此,在您的情况下,修改后您的类应该如下所示。

@Cache
@Entity
public final class Account
{
@Id Long id;
@Index private Ref<User> user;

public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}

@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
public User getUser() {
return user.get();
}

@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
public void setUser(User user) {
this.user = Ref.create(user);
}
}

关于java - 对象化后端和客户端之间的 Key/Ref 往返 [无 GWT],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com