REST GET / POST如何发送和接收复杂参数?

时间:2013-03-28 13:28:41

标签: java rest jersey

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

  1. X Get(T)//用于复杂结果的复杂查询
  2. X Post(T)//用于创建复杂结果
  3. X PUT(T)//用于更新某些成功消息对象
  4. 其中T和X是复杂对象

    我试过@queryparam,@ pathparam在GET上使用复杂的对象@consume& @produce和那些没有用。还尝试了POST(虽然我真的需要GET),但是编码的url也不行。

    请帮助。我需要样本代码来完成它。

1 个答案:

答案 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
  }

}