2012-08-04 88 views
0

我一直在使用澤西一段時間,我只實現了一個POST方法,它獲取Json作爲參數。不過,我希望它的功能如下:Jersey作爲ClassObject的方法參數

// The json class to be used and returned 
    @XmlRootElement 
    public class Container 
    { 
     private boolean isOk; 
     private String message; 

     public Container() {} 

     public boolean getOk() 
     { 
      return this.isOk; 
     } 

     public void setOk(boolean isOk) 
     { 
      this.isOk = isOk; 
     } 
    } 

    // A service 
    @Path("json/test") 
    public class TestService 
    { 
     @POST 
     @Consumes(MediaType.APPLICATION_JSON) 
     @Produces(MediaType.APPLICATION_JSON) 
     public Container readAndReturnMessage(Container receivedJson) 
     { 
      doSomething(receivedJson.getMessage()); 
      return receivedJson; 
     } 
    } 

不幸的是,這是行不通的。儘管傳遞給服務的原始json沒有任何問題,但所有容器變量均爲null。這裏有什麼方法,我是否需要以String作爲參數,並使用Jackson/Gson進行反序列化?

回答

0

添加getter和setter您Container類。

upd。 Here是用於創建Java Bean的召集。請參閱namings部分。順便說一下,我用布爾字段失敗了。最好的辦法:

boolean ok; 

public boolean isOk(){ 
    return this.ok; 
} 

/* if setter is required */ 
public setOk(boolean ok){ 
    this.ok = ok; 
} 
+0

對不起,有getter&setters。我只是忘了添加它們。 – 2012-08-05 15:02:00

+0

如果變量名是'isOk'然後吸氣劑必須是'getIsOk()'和'二傳手setIsOk(布爾ISOK) – 2012-08-05 21:11:30

+0

難道真的變量取決於他們在這種情況下getter和setter方法? – 2012-08-06 17:02:54

2

如果您還沒有添加任何標題,您需要添加的Content-Type頭與POST請求。 因爲您的應用程序正在使用application/json您需要添加 Content-Type:application/json與您的POST請求。

如果您的請求的身體是形式: { 「集裝箱」:{ 「ISOK」: 「真」, 「消息」: 「新信息」 }} 你會得到空值。

請求體的格式應爲: { 「ISOK」: 「真」, 「消息」: 「新信息」 } 這工作得很好。