如何在Jersey REST方法中使用可选数量的参数?

时间:2017-02-08 19:52:50

标签: java rest jersey jax-rs

我是泽西岛的新手。所以,请原谅任何错误。

我正在尝试设置一个简单的REST ws。 方法名称getConnectedMHubs具有一个必需参数thingID和两个可选参数:timedelta

是否可以为两种类型的调用使用相同的方法名称,有和没有可选参数? 我尝试指定两个pathes,但得到ModelValidationException,其中说:

  

资源模型具有HTTP方法的模糊(子)资源方法   获取和输入“@Consumes”和“@Produces”定义的mime类型   Java方法公开的注释......

代码示例:

@Path("/api")
public class RendezvousWebService {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("connectedmhubs/{mhubid}")
    public String getConnectedThings(@PathParam("mhubid") String strMHubID) {
        // ...
        return "{}";
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("connectedmhubs/{mhubid}/{time}/{delta}")
    public String getConnectedThingsExtended(@PathParam("mhubid") String strMHubID, @PathParam("time") long timestamp, @PathParam("delta") long delta){
        // ...
        return "{}";
    }

}

2 个答案:

答案 0 :(得分:2)

使用@Path强制使用参数。您可以使用正则表达式解决此问题,也可以将@QueryParam@DefaultValue一起使用,将两种方法合并为一种。

答案 1 :(得分:1)

使用这样的路径模式:

@Path("connectedmhubs/{mhubid}")

使路径参数成为必需参数。但是,您可以使用正则表达式来克服此限制。有关详细信息,请参阅此link