这是我通过Objectify定义的属性:
@Unindex
@Load
private List<Ref<Achievement>> oTrophyCase;
public List<Ref<Achievement>> getTrophyCase() {
return oTrophyCase;
}
public void setTrophyCase(List<Ref<Achievement>> trophyCase) {
this.oTrophyCase = trophyCase;
}
虽然我已经看到了其他相同但不相似的设计示例,但我在编译时收到此错误:
错误:任务执行失败 &#39;:后端:appengineEndpointsGetClientLibs&#39 ;.运行时出错 endpoints命令get-client-lib:参数化类型 com.googlecode.objectify.Ref 不支持。
我正在使用Objectify 5.1.5。
答案 0 :(得分:0)
我正在寻找相同的答案并找到:
Google Cloud Endpoints无法序列化Ref对象,因为它是objectify定义的任意对象,因此不支持错误。
现在有两种方法可以解决该属性的问题。
- 添加
@ApiResourceProperty
注释,导致在序列化期间从对象中省略键。如果您想要一个简单的解决方案并且不需要访问客户端中的密钥,请使用此方法。- 添加
醇>@ApiTransformer
注释,提供用于序列化/反序列化字段的兼容机制。如果需要访问客户端中的密钥(或其表示),请使用此方法。由于这需要编写变换器类,因此它比第一个选项更有效。
但更有趣的是
这是Cloud Endpoints的问题,而不是Objectify。 CE似乎需要某种未知类的自定义序列化器,如GWT。如果你能弄清楚什么是必要的,我们可以考虑把它包含在Objectify来源中。
所以我发现您可以通过使用@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
或@ApiTransformer(value=class)
注释字段来解决上述问题,其中类是自定义Transformer,解释编译器如何序列化对象。 / p>