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
}
}
感謝您的回覆。你能給出一個接收和返回一個複雜對象的POST示例代碼嗎? – chan
這看起來不錯,但不符合我的標準。我正在嘗試
public X POST (T)
而不是public T POST (T)
– chan我無法編輯我以前的評論。但基本上,我想與你的例子相比,是做一些事情:公職員工職位(SearchEmployeeCriteria sec)。所以本質上是尋找一個具有複雜參數集的員工作爲另一個對象的一部分。你的例子工作,如果返回和參數對象是相同的,但它不在我的例子。 – chan