我正在使用Objectify,希望得到它的Key<>在我的API中传递的类型.我已经创建了一个ApiTransformer,但我的问题是在哪里声明它,因为序列化的Key<> class不可用,因此我不能将其变换器声明为类注释.我尝试在@Api注释中声明它,但它不起作用,我仍然得到错误:
There was a problem generating the API metadata for your Cloud Endpoints classes: java.lang.IllegalArgumentException: Parameterized type com.googlecode.objectify.Key<[my package].User> not supported.
ApiTransformer看起来像:
public class KeyTransformer implements Transformer<Key<?>, String> {
public String transformTo(Key<?> in) {
return in.getString();
}
public Key<?> transformFrom(String in) {
return Key.valueOf(in);
}
}
在我的@Api中我有:
@Api(name = "users", version = "v1",transformers = {KeyTransformer.class})
最佳答案 不幸的是你不能.如你所说,你需要在Key类上声明它,你唯一的机会就是这样做.
1)使用@transformer注释重新编译用于客体化的Key类.
2)使用您自己的实现扩展Key类,并在那里定义转换器.
我真的不喜欢这些选项,所以我通常解决这个问题的方法是隐藏关键对象getter(通过使用@ApiResourceProperty(ignored = AnnotationBoolean.TRUE))并仅显示该键的id.
这样你得到一个端点frendly对象,唯一的缺点是你必须在需要时手动使用Key.create(YourClass.class,longId)重建密钥.