2015-10-16 37 views
-1

我有這樣一個類:玻璃魚java我可以通過獲取請求發送對象嗎?

class Customer { 
    private int id; 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

,我有一個玻璃魚Web服務:

我想知道這是可能使用得到

發送客戶對象(我知道我可以在後期做到這一點,但在得到...我不知道)

這是我試過的:

@GET 
    @Path("/test") 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes(MediaType.APPLICATION_OCTET_STREAM) 
    public String test(@QueryParam("customer") Customer customer) { 
     return "Done " + customer.getId(); 
    } 

然後我這樣稱呼它:

..../test?id=4&name=william 

我知道這是錯的,但我不知道正確的方式,我不知道如果用得到

甚至有可能
+0

應該'name'是'customer' –

+0

@DavidPulse我不這麼認爲,因爲客戶是一個對象,這就是我所要求的實際內容 –

+0

請閱讀關於REST基礎知識的一些信息...您期望什麼從通過HTTP發送一個Java對象...你認爲「下載器」會得到什麼? – unwichtich

回答

2

@QueryParam應該用於每個單獨的參數。例如

/cusomters?name=hello&id=1 

@GET 
@Produces(...) 
public Response get(@QueryParam("name") String name, 
        @QueryParam("id") int id) 

如果你想要把它變成一個bean,你可以使用@BeanParam,它允許你把任意@XxxParam s轉換的bean。例如

class Customer { 
    @QueryParam("name") 
    private String name; 
    @QueryParam("id") 
    private int id; 
    // getters/setters 
} 

@GET 
public Response get(@BeanParam Customer customer) 

但請記住REST原則。要創建客戶資源,其用POST完成。也要考慮安全問題。你不希望URL中的私人用戶信息。

+0

沒錯。我只是不知道如何編碼。 –

+0

在這種情況下,@consum註釋是什麼? –

+0

@MarcoDinatsoli您不使用'@ Consumes'進行GET。沒有身體。 '@ Consumes'只是說你可以處理的實體主體類型(主要是POST/PUT)。由於沒有身體,不需要註釋。你的所有數據都在URL中,而不是正文 –