我正在使用Jersey并将现有的数据服务转换为RESTful数据服务。我可以成功转换最简单的GET和PUT。但以下是一些我无法转换的内容:
其中T和X是复杂对象
我试过@queryparam,@ pathparam在GET上使用复杂的对象@consume& @produce和那些没有用。还尝试了POST(虽然我真的需要GET),但是编码的url也不行。
请帮助。我需要样本代码来完成它。
答案 0 :(得分:2)
REST不是为处理复杂的查询而设计的,因为查询实际上是URL。检索资源时,请指定所需资源的ID。这只是一个数字或字符串,很容易在URL中表示,例如;
http://host/employee/57
会让你的员工57.如果你的要求更复杂,那么你可能想要使用搜索方法,在那里传递几个参数。你可以在这里使用@QueryParam
,但这不是真正的REST形式。
如果您正在POST或PUTting数据,那么您使用与进行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
}
}