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>参数!

+1

其实你发布了一个包含“User”的`user`属性的对象。对象由{}表示,数组由[]表示。本身没有列表。 – 2010-11-27 15:56:05