Google app engine Appengine与Google云端点和Guice

Google app engine Appengine与Google云端点和Guice,google-app-engine,dependency-injection,guice,google-cloud-endpoints,Google App Engine,Dependency Injection,Guice,Google Cloud Endpoints,所以我想使用Appengine中的Guice和云端点来注入我的服务,或者DAO——我想这很常见,但我没有找到这方面的教程 Appengine文档的官方指南如下: 配置Guice时,您将com.google.inject.servlet.GuiceFilter设置为拦截每个请求“/*”。在某个时刻,您必须初始化模块。就像文档中说的那样,一个好的地方是ServletContextListener 一种特殊的模块是ServletModules,它将请求路径映射到Servlet类,而不是在web.xml

所以我想使用Appengine中的Guice和云端点来注入我的服务,或者DAO——我想这很常见,但我没有找到这方面的教程

Appengine文档的官方指南如下:

配置Guice时,您将com.google.inject.servlet.GuiceFilter设置为拦截每个请求“/*”。在某个时刻,您必须初始化模块。就像文档中说的那样,一个好的地方是ServletContextListener

一种特殊的模块是ServletModules,它将请求路径映射到Servlet类,而不是在web.xml中执行此操作,现在可以通过编程方式执行此操作


一直往前走到这里。但是,如何配置Guice以同时包含端点类呢?

事实证明,有一个GuiceSystemServiceServletModule正好处理这个问题

public class GuiceSSSModule extends GuiceSystemServiceServletModule {

  @Override
  protected void configureServlets() {
    super.configureServlets();

    Set<Class<?>> serviceClasses = new HashSet<Class<?>>();
    serviceClasses.add(MyEndpoint.class);
    serviceClasses.add(AnotherAndpoint.class);
    this.serveGuiceSystemServiceServlet("/_ah/spi/*", serviceClasses);
  }
}
并在web.xml中使用此侦听器:

<listener>
   <listener-class>de.mypkg.MyGSCL</listener-class>
</listener>
<!-- GUICE -->
<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

de.mypkg.MyGSCL
还要确保在web.xml中包含Guice筛选器:

<listener>
   <listener-class>de.mypkg.MyGSCL</listener-class>
</listener>
<!-- GUICE -->
<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

guiceFilter
com.google.inject.servlet.GuiceFilter
guiceFilter
/*

您的端点将在/_ah/api/…下可用。。。同样,您可以在端点类中使用@Inject。

这与我们在应用程序引擎后端中使用的方法相同。从昨天开始,我无法再使用AppEngine版本1.9.17更新后端,所以我升级到了1.9.38。现在它上传了,但我总是得到这个错误:来自servlet java.lang.NoClassDefFoundError的未捕获异常:nl///guice/GuiceSSSModule@Roel我在使用AppEngine版本1.9.37时遇到了类似的问题,但在阅读了您的评论后,我升级到了1.9.46,然后问题消失了