2013-03-28 43 views
1

我正在使用Jersey並將現有數據服務轉換爲RESTful數據服務。我可以成功轉換大多數簡單的GET和PUT。但是,下面是一些我不能夠轉換:REST GET/POST如何發送和接收復雜的參數?

  1. X獲取(T)//用於複雜的結果複雜的查詢與複雜的結果
  2. X PUT創建
  3. X郵報(T)// (T)//用於與一些成功消息對象更新

其中T和X是一個複雜的對象

我試圖@QueryParam,@PathParam用與@consumeGET複雜對象@produce和那些沒有工作。也試過POST(雖然我真的需要GET)與URL編碼,並沒有工作太多。

請幫忙。我需要這樣做的示例代碼。

回答

2

REST並非設計用於處理複雜的查詢,因爲查詢實際上是URL。當您檢索資源時,您可以指定所需資源的ID。這只是一個數字或字符串,很容易在URL中表示;

http://host/employee/57 

會讓你的員工57.如果您的需求比較複雜,那麼你可能想使用搜索方法,在那裏你傳遞一些參數。你可以在這裏使用@QueryParam,但這不是純粹的REST形式。

如果您正在發佈或放入數據,那麼您使用的URL與您在進行GET時所使用的URL相同,只是這次您在內容主體中發送數據。由於您可以序列化對象以便將其返回給GET請求,您的客戶端也應該能夠序列化它以便以PUT或POST方式發送給您。

下面是一個GET和POST的例子;

@XmlType 
public class Employee { 
    private int id; 
    private String name; 

    //getters and setters 
} 


@Path("/employee") 
public class EmployeeService { 

    @GET 
    @Path("/{id}") 
    @Produces(MediaType.APPLICATION_XML) 
    public Employee get(@PathParam("id") String id) { 
    Employee e = employeeDao.getEmployee(id); 
    if (e != null) { 
     return e; 
    } else { 
     throw new WebApplicationException(404); 
    } 
    } 

    @POST 
    @Consumes(MediaType.APPLICATION_XML) 
    @Produces(MediaType.APPLICATION_XML) 
    public Employee post(Employee employee) { 
    return employeeDao.insertEmployee(employee); //Assumes your DAO sets the ID 
    } 

} 
+0

感謝您的回覆。你能給出一個接收和返回一個複雜對象的POST示例代碼嗎? – chan

+0

這看起來不錯,但不符合我的標準。我正在嘗試public X POST (T)而不是public T POST (T) chan

+0

我無法編輯我以前的評論。但基本上,我想與你的例子相比,是做一些事情:公職員工職位(SearchEmployeeCriteria sec)。所以本質上是尋找一個具有複雜參數集的員工作爲另一個對象的一部分。你的例子工作,如果返回和參數對象是相同的,但它不在我的例子。 – chan