Pat*_*ick 16 google-app-engine objectify google-cloud-endpoints
我正在使用appengine云端点和客观化.我之前已经部署了这些端点,现在我正在更新它们,它不能与Objectify一起使用.我已经搬到了新机器并运行最新的appengine 1.8.6.尝试将objectify放在classpath中并且不起作用.我知道这可以工作,我错过了什么?
运行endpoints.sh时:
Error: Parameterized type
com.googlecode.objectify.Key<MyClass> not supported.
Run Code Online (Sandbox Code Playgroud)
更新:我回到我的旧计算机并在同一端点上运行endpoints.sh并且工作正常.旧机器有1.8.3.我正在使用客观化3.1.
更新2:将我的旧机器更新为1.8.6并获得与其他机器相同的错误.留下2种可能性:1)端点不再支持客观化3.1 或 2)端点在最新版本中存在错误
最有可能#1 ...我一直想要更新到4.0 ...
Dan*_*oet 18
由于Objectify的流行,在先前版本中添加了一种解决方法来支持该Key类型,直到有更通用的解决方案可用.由于新解决方案可用,因此已删除了解决方法.现在有两种方法可以解决该属性的问题.
@ApiResourceProperty注释,使序列化期间从对象中省略键.如果您想要一个简单的解决方案而不需要访问客户端中的密钥,请使用此方法.@ApiTransformer注释,该注释提供用于序列化/反序列化字段的兼容机制.如果需要访问客户端中的密钥(或其表示),请使用此方法.由于这需要编写变换器类,因此它比第一个选项更有效.我为我的项目想出了以下解决方案:
@Entity
public class Car {
@Id Long id;
@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
Key<Driver> driver;
public Key<Driver> getDriver() {
return driver;
}
public void setDriver(Key<Driver> driver) {
this.driver = driver;
}
public Long getDriverId() {
return driver == null ? null : driver.getId();
}
public void setDriverId(Long driverId) {
driver = Key.create(Driver.class, driverId);
}
}
@Entity
public class Driver {
@Id Long id;
}
Run Code Online (Sandbox Code Playgroud)
我知道,它有点样板,但是嘿 - 它的工作原理并添加了一些方便的快捷方法.
| 归档时间: |
|
| 查看次数: |
3380 次 |
| 最近记录: |