Java 多个获取方法匹配:选择最特定的

Java 多个获取方法匹配:选择最特定的,java,rest,jakarta-ee,jax-rs,java-ee-7,Java,Rest,Jakarta Ee,Jax Rs,Java Ee 7,我有一个web服务,看起来像: @Path("/ws") public class Ws { @GET public Record getOne(@QueryParam("id") Integer id) { return record(id); } @GET public List<Record> getAll() { return allRecords(); } } @Path(“/ws”) 公共类Ws{ @获取公共记录getOne(@QueryParam(“i

我有一个web服务,看起来像:

@Path("/ws")
public class Ws {
    @GET public Record getOne(@QueryParam("id") Integer id) { return record(id); }
    @GET public List<Record> getAll() { return allRecords(); }
}
@Path(“/ws”)
公共类Ws{
@获取公共记录getOne(@QueryParam(“id”)整数id){返回记录(id);}
@获取公共列表getAll(){return allRecords();}
}
我的想法是,我可以打电话:

  • http://ws:8080/ws?id=1
    获取特定记录
  • http://ws:8080/ws
    获取所有可用记录
但是,当我使用第二个URL时,第一个
@GET
方法被调用,其id为null
id

有没有一种方法可以在不使用不同路径的情况下实现我想要的


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

因为路径相同,所以不能将其映射到不同的方法。如果使用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
    获取所有可用记录

为什么不在代码中实现一个逻辑,检查参数是否为
null
,然后返回all?@user432这两个方法的返回类型不同-我可以返回一个
对象
,我想它看起来有点乱……你返回什么?能否返回一个包含一个参数的列表和一个包含所有参数的列表?我不知道如何将URL与另一个方法进行特定匹配,因此我会采用这种设计。对于REST样式的服务,您应该将特定请求映射到控制器。我没有遇到任何将多个请求映射到一个方法的情况。获取记录和获取所有记录应具有不同的URL映射。这是你得到的资源的唯一性。剩下的就这些了。以亚马逊Prime即时视频为例。当您选择Amazon Prime即时视频类别时,请将搜索框留空,然后按ENTER键-您是否看到指向Amazon Prime视频的简单URL或其中是否包含请求字符串?每个请求映射都应该不同。