Java googleappengine中的多id参数查询

Java googleappengine中的多id参数查询,java,google-app-engine,rest,google-cloud-endpoints,jdo,Java,Google App Engine,Rest,Google Cloud Endpoints,Jdo,我真的很想让Objectify开始工作,但我就是不明白为什么它在我的项目中不起作用,所以我转而使用JDO,出现了这些问题。我正在做一个项目管理应用程序,因为一个人可以参与多个项目,而且项目上可以有很多人,所以我在person.java和project.java之间建立了一种无主关系 Person.java 包com.pontuse.appendpoint import java.util.List; import javax.jdo.annotations.IdGeneratorStrateg

我真的很想让Objectify开始工作,但我就是不明白为什么它在我的项目中不起作用,所以我转而使用JDO,出现了这些问题。我正在做一个项目管理应用程序,因为一个人可以参与多个项目,而且项目上可以有很多人,所以我在person.java和project.java之间建立了一种无主关系

Person.java 包com.pontuse.appendpoint

import java.util.List;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable
public class Person {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    Long id;
    @Persistent
    String userName;
    @Persistent
    String pass;
    //Modelling relationship with projects
    @Persistent
    List<Long> projectsInvolved;

    public Person() {
    }

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPass() {
        return pass;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }

    public List<Long> getProjectsInvolved() {
        return projectsInvolved;
    }

    public void setProjectsInvolved(List<Long> projectsInvolved) {
        this.projectsInvolved = projectsInvolved;
    }
}
如果我只输入一个(仍然有效)id,我会得到一个NullPointerException

503 Service Unavailable

- Show headers -

{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "java.lang.NullPointerException"
}
],
"code": 503,
"message": "java.lang.NullPointerException"
}
}

有人能看到发生了什么或者我是否实现了错误的方法吗?

看起来你已经用Peter的建议消除了NullPointerException。要解决404 Not Found异常的问题,您必须在API方法
GetPersonProjects
@Named
注释之前添加
@Nullable
注释。这将告诉应用程序引擎将此参数视为不需要URL路径的查询参数


来源:

您是否能够在端点方法中放置一个try-catch,然后记录异常和stacktrace,以查看是哪一行导致了问题。如果您仍然想再次尝试Objectify,请尝试此Guice/Jersey/Objectify/endpoint样板应用程序NullPointerException-可能是因为您设置了
PersistenceManager mgr=null,然后调用mgr.getObjectById(..)
?好的,我设置了持久性管理器,现在如果我提供了一个带有一个值的列表,它将返回一个项目。两个值,它仍然返回404.state显而易见:您不需要所有这些@Persistent。这些类型中的大多数默认为persistent(使代码难以读取)。不知道你的“疑问”是什么。我看不到pm.newQuery。如果您指的是pm.getObjectById,那么该方法返回了什么?谢谢!您让我避免了使用单个api调用获取每个元素,这将对性能造成灾难性的影响!
@ApiMethod(name = "getPersonsProjects")
    public CollectionResponse<Project> getPersonsProjects(@Named("projects") List<Long> projects){
        PersistenceManager mgr = null;
        List<Project> execute = new ArrayList<Project>();

        for(Long l: projects)
        execute.add(mgr.getObjectById(Project.class, l));

        mgr.close();
        return CollectionResponse.<Project> builder().setItems(execute).build();
    }
404 Not Found

- Hide headers -

Cache-Control:  no-cache, no-store, max-age=0, must-revalidate
Content-Encoding:  gzip
Content-Length:  29
Content-Type:  text/html; charset=UTF-8
Date:  Wed, 08 Oct 2014 20:38:05 GMT
Expires:  Fri, 01 Jan 1990 00:00:00 GMT
Pragma:  no-cache
Server:  GSE

Not Found
503 Service Unavailable

- Show headers -

{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "java.lang.NullPointerException"
}
],
"code": 503,
"message": "java.lang.NullPointerException"
}
}