Java googleappengine中的多id参数查询
我真的很想让Objectify开始工作,但我就是不明白为什么它在我的项目中不起作用,所以我转而使用JDO,出现了这些问题。我正在做一个项目管理应用程序,因为一个人可以参与多个项目,而且项目上可以有很多人,所以我在person.java和project.java之间建立了一种无主关系 Person.java 包com.pontuse.appendpointJava 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
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"
}
}