簡體   English   中英

Guice注入Google Cloud Endpoints變壓器

[英]Guice Injection into Google Cloud Endpoints Transformer

我有一個Google Cloud Endpoints應用程序可以成功與Guice合作

我希望將Singleton注入Api變壓器

假設我希望將Something轉換為SomethingElse,其中Something聲明其轉換器為:

import com.google.api.server.spi.config.Transformer;
import com.google.inject.Inject;
import com.google.inject.Singleton;

@Singleton
public class MyApiTransformer
    implements Transformer<Something, SomethingElse> {

private MySingleton singleton;

@Inject
public MyApiTransformer(MySingleton singleton) {
    this.singleton = singleton;
}
@Override
public Something transformFrom(SomethingElse somethingElse) {
    return singleton.something(somethingElse);
}

@Override
public SomethingElse transformTo(Something something) {
    return singleton.somethingElse(something);
}

}

注意,我希望將轉換委托給我的Guice單例。 當我嘗試上述變壓器時,出現以下錯誤:

java.io.IOException:com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException:無法實例化自定義序列化程序MyApiTransformer,找不到構造函數:[[interface java.lang.reflect.Type),(類java .lang.Class),()]

看來Guice沒有提供ApiTransformers,所以Jackson沒有默認的構造函數也不知道如何實例化該類。

Guice如何將Singleton注入ApiTransformer?

給您的Transformer一個默認的構造函數並執行靜態注入:

import com.google.api.server.spi.config.Transformer;
import com.google.inject.Inject;

public class MyApiTransformer
    implements Transformer<Something, SomethingElse> {

@Inject
private static MySingleton singleton;

public MyApiTransformer() {

}
@Override
public Something transformFrom(SomethingElse somethingElse) {
    return singleton.something(somethingElse);
}

@Override
public SomethingElse transformTo(Something something) {
    return singleton.somethingElse(something);
}

}

在您的模塊中:

public class MyModule
    extends AbstractModule {

@Override
protected void configure() {

    requestStaticInjection(MyApiTransformer.class);
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM