参数化类型不受支持

时间:2016-06-28 03:57:00

标签: backend google-cloud-endpoints objectify google-cloud-datastore

这是我通过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。

1 个答案:

答案 0 :(得分:0)

我正在寻找相同的答案并找到:

  

Google Cloud Endpoints无法序列化Ref对象,因为它是objectify定义的任意对象,因此不支持错误。

  

现在有两种方法可以解决该属性的问题。

     
      
  1. 添加@ApiResourceProperty注释,导致在序列化期间从对象中省略键。如果您想要一个简单的解决方案并且不需要访问客户端中的密钥,请使用此方法。
  2.   
  3. 添加@ApiTransformer注释,提供用于序列化/反序列化字段的兼容机制。如果需要访问客户端中的密钥(或其表示),请使用此方法。由于这需要编写变换器类,因此它比第一个选项更有效。
  4.   

但更有趣的是

  

这是Cloud Endpoints的问题,而不是Objectify。 CE似乎需要某种未知类的自定义序列化器,如GWT。如果你能弄清楚什么是必要的,我们可以考虑把它包含在Objectify来源中。

所以我发现您可以通过使用@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)@ApiTransformer(value=class)注释字段来解决上述问题,其中类是自定义Transformer,解释编译器如何序列化对象。 / p>