2014-03-31 59 views
4

我正在使用Objectify並希望將其鍵<>類型在我的API中傳遞。我創建了一個ApiTransformer,但是我的問題是在哪裏聲明它,因爲序列化的Key不可用,因此我無法將其變換器聲明爲類註解。我試圖宣佈它在@Api註解,但它不工作,我仍然得到錯誤:ApiTransformer爲參數化,不可用類型

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}) 
+0

我甚至嘗試在字段中添加註釋,沒有用。 – azyoot

回答

2

不幸的是,你不能。正如你所說,你需要在Key類上聲明它,你唯一的機會就是做這個工作。

1)使用@transformer註解重新編譯對象化的Key類。

2)用你自己的實現擴展Key類,並在那裏定義變換器。

我真的不喜歡任何這些選項,所以我通常解決這個問題的方式是隱藏關鍵對象獲得者(使用@ApiResourceProperty(ignored=AnnotationBoolean.TRUE))並且只顯示該關鍵字的id。

通過這種方式你可以得到一個端點可變的對象,唯一的缺點是你必須在需要時手動使用Key.create(YourClass.class, longId)來重新構造這個鍵。