2010-11-23 93 views
4

我想寫一個服務,它將接受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; 
} 

回答

5

也許沒有人回答我的問題,因爲這個問題有這樣一個顯而易見的解決方案!

我注意到自己的錯誤後,我可以回答自己的問題。

的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