使用Google Eclipse插件干扰Google Cloud Endpoints

lea*_*ner 9 java google-app-engine gae-eclipse-plugin google-cloud-endpoints

使用Google Appengine Eclipse插件生成端点时,我遇到了一种奇怪的行为.我有一个端点类,有超过20个端点方法.当我第一次尝试为android生成端点时,我得到了错误

 Generating Cloud Endpoint has encountered errors and is not complete
Run Code Online (Sandbox Code Playgroud)

通过故障排除,我注释掉所有找到罪魁祸首的方法.我发现有点莫名其妙.取消注释第16个方法后,我再次收到错误.有两种方法相互干扰!如果我注释掉一个或另一个端点生成正常.但如果我同时取消注释,我会得到上面的错误.

有谁知道可能导致这种干扰的原因是什么?

@ApiMethod(name = "getOrangers", httpMethod = HttpMethod.POST)
public FaceList getOrangers(UserRequest request) throws NotFoundException {
    FaceList list = new FaceList();
    return list;
}

@ApiMethod(name = "getMangoers", httpMethod = HttpMethod.POST)
public FaceList getMangoers(UserRequest request) throws NotFoundException {
    FaceList list = new FaceList();
    return list;
}
Run Code Online (Sandbox Code Playgroud)

我已经将方法编辑到它们的存根,如上所示,仍然会遇到相同的干扰问题.

Mik*_*ikO 34

首先,当您收到有关令人讨厌的不良消息的错误时:

生成Cloud Endpoint遇到错误但未完成

你应该检查错误日志Window -> Show View -> Error Log获得更多的信息.


我这样做了,我发现实际的例外是:

java.lang.IllegalArgumentException: 
  Multiple methods with same rest path "POST facelist": "getOrangers" and "getMangoers"
Run Code Online (Sandbox Code Playgroud)

所以,问题是你的2种方法有相同的路径!明确添加方法的路径将解决问题:

@ApiMethod(name="getOrangers", path="get_oranges", httpMethod=HttpMethod.POST)
public FaceList getOrangers(UserRequest request) throws NotFoundException {
    //...
}

@ApiMethod(name="getMangoers", path="get_mangoers", httpMethod=HttpMethod.POST)
public FaceList getMangoers(UserRequest request) throws NotFoundException {
    //...
}
Run Code Online (Sandbox Code Playgroud)

注意:由于您没有为方法设置路径,因此GPE会自动生成它们.似乎GPE为这两种方法生成相同的路径,用于形成HTTP方法(POST)和返回值(facelist)的路径,这与Google Cloud Endpoints文档中的内容不一致:

" path:用于访问此方法的URI路径.如果未设置此值,则根据Java 方法名称使用默认路径. "

它表示使用方法名称自动生成路径,在这种情况下,您不会收到任何错误,因为您的2种方法明显有不同的名称.所以我想它必定是端点中的一个bug(和许多其他人一样).