GAE Jersey RESTful服务POST JSON
问题描述:
我想写一个服务,它将接受POST请求中的JSON或XML对象。我已经成功地编写了一个GET请求处理程序,该请求处理程序将根据标头的接受请求将对象作为XML或JSON返回。当我使用JSON作为请求的主体POST POST服务时,我的POST方法中的Java对象没有填充来自json的值。GAE Jersey RESTful服务POST JSON
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void postUser(@Context HttpServletRequest Req, User user)
{
PersistenceManager pm = PMF.get().getPersistenceManager();
try
{
pm.makePersistent(user);
}
finally
{
pm.close();
}
}
当我在POST方法中断时,User类型的Java对象“user”具有属性的空值。该对象本身不是空的,只是属性。
这是由POST
{"user":{"logon":"kevin","password":"password","personid":"xyz"}}
提交
而且这里的JSON是我班
package com.afalon.cloud.contracts;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.jdo.annotations.Extension;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable
@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.NONE)
public class User {
@Persistent
@XmlElement(name="logon")
private String logon;
@Persistent
@XmlElement(name="password")
private String password;
@Persistent
@XmlElement(name="personid")
private String personid;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
@XmlElement(name="userid")
private String userid;
public User() {}
public void setLogOn(String value) {
logon = value;
}
public String getLogOn() {
return logon;
}
public void setPassword(String value) {
password = value;
}
public String getPassword() {
return password;
}
public void setPersonId(String value) {
personid = value;
}
public String getPersonId() {
return personid;
}
public String getUserId() {
return userid;
}
答
也许没有人回答我的问题,因为这个问题有这样一个显而易见的解决方案!
我注意到自己的错误后,我可以回答自己的问题。
的JSON的身体,我提交被格式化为User
对象的列表,所以如果我编辑
{"user":{"logon":"kevin","password":"password","personid":"xyz"}}
到
{"logon":"kevin","password":"password","personid":"xyz"}
一切正常,因为我@POST处理程序不期望列表User
对象。另外我可以调整我的@POST处理程序来接受List<User>
参数!
其实你发布了一个包含“User”的`user`属性的对象。对象由{}表示,数组由[]表示。本身没有列表。 – 2010-11-27 15:56:05