有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我从新泽西到新泽西。所以,请原谅任何错误

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

是否可以对两种类型的调用使用相同的方法名,包括可选参数和不包括可选参数? 我试图指定两个路径,但得到一个ModelValidationException,表示:

A resource model has ambiguous (sub-)resource method for HTTP method GET and input mime-types as defined by"@Consumes" and "@Produces" annotations at Java methods public ...

代码示例:

@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) 个答案

  1. # 1 楼答案

    使用如下路径模式:

    @Path("connectedmhubs/{mhubid}")
    

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

  2. # 2 楼答案

    使用@Path使参数成为必需的。您可以使用正则表达式解决这个问题,或者使用@QueryParam@DefaultValue将两个方法合并为一个