2

我们已经在我们的应用程序中成功使用 Endpoints V1 几年了。现在,当尝试迁移到 Endpoints V2 时,它突然因为找不到 EndpointsServlet 而突然刹车,并且总是返回 404。

这仍然是一个已知问题(对于某些应用程序)还是我该如何解决这个问题?

404 响应如下所示:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "\u003chtml\u003e\u003chead\u003e\n\u003cmeta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"\u003e\n\u003ctitle\u003e404 Not Found\u003c/title\u003e\n\u003c/head\u003e\n\u003cbody text=#000000 bgcolor=#ffffff\u003e\n\u003ch1\u003eError: Not Found\u003c/h1\u003e\n\u003c/body\u003e\u003c/html\u003e\n"
   }
  ],
  "code": 404,
  "message": "\u003chtml\u003e\u003chead\u003e\n\u003cmeta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"\u003e\n\u003ctitle\u003e404 Not Found\u003c/title\u003e\n\u003c/head\u003e\n\u003cbody text=#000000 bgcolor=#ffffff\u003e\n\u003ch1\u003eError: Not Found\u003c/h1\u003e\n\u003c/body\u003e\u003c/html\u003e\n"
 }
}
4

3 回答 3

2

解决方案是在使用 Endpoints V2 部署应用程序时使用全新的未使用版本名称,而不是:

https://test-dot-[app_id].appspot.com (this used previously Endpoints V1)

使用全新的版本名称,例如

https://test-new-dot-[app_id].appspot.com

如此处所述:https ://cloud.google.com/endpoints/docs/known-issues

“...您当前必须部署到新的 App Engine 应用版本。重用旧应用版本可能会与旧 Endpoints 部署冲突...”

于 2018-03-29T08:17:22.047 回答
0

确保

  1. 您在 web.xml 中有此部分(无论您是否在 POM.XML 中有它!)
 <!-- Wrap the backend with Endpoints Frameworks v2. --> 
    <servlet>
        <servlet-name>EndpointsServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>com.example.echo.Echo,com.example.echo.Foo</param-value>
        </init-param>
    </servlet>
<!--     Route API method requests to the backend. -->
    <servlet-mapping>
        <servlet-name>EndpointsServlet</servlet-name>
        <url-pattern>/_ah/api/*</url-pattern>
    </servlet-mapping>
  1. 您在 web.xml、pom.xml、appengine-web.xml 中正确且一致的 {ProjectId}。如果使用 gcloud shell,请检查您当前的活动配置及其项目。

  2. 为了更安全,在从旧框架 V1 迁移到 V2 时,将您的应用程序部署在新版本上。

于 2020-01-08T10:29:09.577 回答
0

当我将 SystemServiceServlet 仍配置为使用旧的 url 模式时,我遇到了这个问题。

正确的:

 <servlet-mapping>
    <servlet-name>SystemServiceServlet</servlet-name>
    <url-pattern>/_ah/api/*</url-pattern>
 </servlet-mapping>

不正确:

 <servlet-mapping>
    <servlet-name>SystemServiceServlet</servlet-name>
    <url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>

V2 的 servlet 类也更改为:com.google.api.server.spi.EndpointsServlet.

于 2018-07-12T18:41:29.700 回答