1

我正在使用 Jersey 并将我现有的数据服务转换为 RESTful 数据服务。我可以成功转换的最简单的 GET 和 PUT。但以下是一些我无法转换的:

  1. X Get (T) // 用于具有复杂结果的复杂查询
  2. X Post (T) // 用于创建复杂结果
  3. X PUT (T) // 用于更新一些成功消息对象

其中 T 和 X 是复杂对象

我已经尝试了@queryparam、@pathparam 以及带有@consume 和@produce 的GET 上的复杂对象,但这些都不起作用。还尝试了使用 url 编码的 POST(尽管我真的需要 GET),但也没有用。

请帮忙。我需要执行此操作的示例代码。

4

1 回答 1

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
  }

}
于 2013-03-28T14:03:42.460 回答