Google app engine =getEntityManager(); 试一试{ if(包含七项数据(事件数据)){ 抛出新的EntityExistsException(“对象已存在”); } 经理(事件数据); }最后{ 经理关闭(); } 返回事件数据; } /** *此方法用于更新现有实体。如果实体没有 *如果数据存储中存在,将引发异常。 *它使用HTTP PUT方法。 * *@param eventData要更新的实体。 *@返回更新的实体。 */ @ApiMethod(name=“updateEventData”) 公共事件数据更新事件数据(EventData EventData){ EntityManager mgr=getEntityManager(); 试一试{ 如果(!containsEventData(eventData)){ 抛出新EntityNotFoundException(“对象不存在”); } 经理(事件数据); }最后{ 经理关闭(); } 返回事件数据; } /** *此方法删除主键id为的实体。 *它使用HTTP删除方法。 * *@param id要删除的实体的主键。 *@返回已删除的实体。 */ @ApiMethod(name=“removeEventData”) public EventData removeEventData(@Named(“id”)字符串id){ EntityManager mgr=getEntityManager(); EventData EventData=null; 试一试{ eventData=mgr.find(eventData.class,id); 经理移除(事件数据); }最后{ 经理关闭(); } 返回事件数据; } 私有布尔值包含SeventData(EventData EventData){ EntityManager mgr=getEntityManager(); 布尔包含=真; 试一试{ EventData item=mgr.find(EventData.class,EventData.getEventKey()); 如果(项==null){ 包含=假; } }最后{ 经理关闭(); } 返回包含; } 私有静态EntityManager getEntityManager(){ 返回EMF.get().createEntityManager(); } }

Google app engine =getEntityManager(); 试一试{ if(包含七项数据(事件数据)){ 抛出新的EntityExistsException(“对象已存在”); } 经理(事件数据); }最后{ 经理关闭(); } 返回事件数据; } /** *此方法用于更新现有实体。如果实体没有 *如果数据存储中存在,将引发异常。 *它使用HTTP PUT方法。 * *@param eventData要更新的实体。 *@返回更新的实体。 */ @ApiMethod(name=“updateEventData”) 公共事件数据更新事件数据(EventData EventData){ EntityManager mgr=getEntityManager(); 试一试{ 如果(!containsEventData(eventData)){ 抛出新EntityNotFoundException(“对象不存在”); } 经理(事件数据); }最后{ 经理关闭(); } 返回事件数据; } /** *此方法删除主键id为的实体。 *它使用HTTP删除方法。 * *@param id要删除的实体的主键。 *@返回已删除的实体。 */ @ApiMethod(name=“removeEventData”) public EventData removeEventData(@Named(“id”)字符串id){ EntityManager mgr=getEntityManager(); EventData EventData=null; 试一试{ eventData=mgr.find(eventData.class,id); 经理移除(事件数据); }最后{ 经理关闭(); } 返回事件数据; } 私有布尔值包含SeventData(EventData EventData){ EntityManager mgr=getEntityManager(); 布尔包含=真; 试一试{ EventData item=mgr.find(EventData.class,EventData.getEventKey()); 如果(项==null){ 包含=假; } }最后{ 经理关闭(); } 返回包含; } 私有静态EntityManager getEntityManager(){ 返回EMF.get().createEntityManager(); } },google-app-engine,rest,android-studio,google-cloud-endpoints,Google App Engine,Rest,Android Studio,Google Cloud Endpoints,自动生成的路径的结尾如下:\u ah/api/endpoint\u name/version\u name/return\u type/{named\u parameter\u 1}/{named\u parameter\u 2}/.. 您面临的问题是,这两个方法位于同一个端点类中,版本相同,返回类型相同,并且使用GET。因此,URL将是相同和冲突的。在本例中,它们都是\u ah/api/eventdataendpoint/v1/eventdata 解决方案是将添加到其中一个类中,如下所示: @

自动生成的路径的结尾如下:
\u ah/api/endpoint\u name/version\u name/return\u type/{named\u parameter\u 1}/{named\u parameter\u 2}/..

您面临的问题是,这两个方法位于同一个端点类中,版本相同,返回类型相同,并且使用
GET
。因此,URL将是相同和冲突的。在本例中,它们都是
\u ah/api/eventdataendpoint/v1/eventdata

解决方案是将添加到其中一个类中,如下所示:

@ApiMethod(name = "listUserEventData", path="eventdata/user")
public CollectionResponse<EventData> listUserEventData(…
@ApiMethod(name=“listUserEventData”,path=“eventdata/user”)
public CollectionResponse listUserEventData(…
现在,第一个方法具有URL
\u ah/api/eventdataendpoint/v1/eventdata
,第二个方法将具有路径
\u ah/api/eventdataendpoint/v1/eventdata/user

随着端点中方法数量的增加,您会遇到很多类似这样的冲突,因此如果您计划创建许多新方法,最好每次都使用
path
属性,而不是依赖CE自动生成路径


编辑:你会在
你的APP\u ID.appspot.com/\u ah/API/discovery/v1/API/ENDPOINT\u NAME/v1/rest

上找到很多关于你的API和每个方法路径的信息@willma给出的答案绝对正确! 但是暂时解决这个问题并避免大量代码更改的一个非常简单的方法是添加另一个要在方法中传递的命名参数

public Event getFirstEvent(@Named("mainEventId") Long mainEventId,
@命名为(“无用”)布尔无用


重复的真实,相同的问题,感谢链接欢迎,事实上我已经发布了比我第一个答案,虽然这是非常常见的问题,它可能已经被别人问了,而不是我得到了这个,并删除了我的答案。希望你的问题得到解决。
public Event getFirstEvent(@Named("mainEventId") Long mainEventId,
User auth) throws UnauthorizedException {
                if (auth!=null){
                    ...
                    return event
                } else throw new UnauthorizedException("Please authenticate first.");
            }
    public Event getEvent(@Named("eventID") Long eventID, User auth) throws UnauthorizedException {
                if (auth != null) {
                    ...
                    return event;
                } else throw new UnauthorizedException("Please authenticate first.");
            }