多个GET方法匹配:选择最具体的

时间:2014-11-08 11:14:44

标签: java rest java-ee jax-rs java-ee-7

我有一个看起来像这样的网络服务:

@Path("/ws")
public class Ws {
    @GET public Record getOne(@QueryParam("id") Integer id) { return record(id); }
    @GET public List<Record> getAll() { return allRecords(); }
}

我的想法是我可以打电话:

  • http://ws:8080/ws?id=1获取特定记录
  • http://ws:8080/ws获取所有可用记录

但是,当我使用第二个网址时,第一个@GET方法将使用空id进行调用。

有没有办法在不使用不同路径的情况下实现我想要的目标?

我认为这可以通过Spring分别使用@RequestMapping(params={"id"})@RequestMapping注释来实现第一个和第二个方法,但我不能在该项目中使用Spring。

1 个答案:

答案 0 :(得分:4)

由于路径相同,因此无法将其映射到其他方法。如果使用REST样式映射更改路径

@Path("/ws")
public class Ws {
    @GET @Path("/{id}") public Response getOne(@PathParam("id") Integer id) { return Response.status(200).entity(record(id)).build(); }
    @GET public Response getAll() { return Response.status(200).entity(allRecords()).build(); } 

然后你应该使用:

  • http://ws:8080/ws/1获取特定记录
  • http://ws:8080/ws获取所有可用记录