我正在使用带有RESTEasy的JAX-RS。
我想知道我们是否可以代表不同的资源,只根据查询参数的顺序和数量区分路径?
e.g。
/customer/1234
/customer?id=1234
/customer?name=James
我可以创建三种不同的方法,例如
@Path("customer/{id}")
public Response get(@PathParam("id") final Long id) {
..
}
@Path("customer?id={id}")
public Response get(@QueryParam("id") final Long id) {
..
}
@Path("customer?name={name}")
public Response get(@QueryParam("name") final String name) {
..
}
这是否有效,我可以通过区分这样的路径来调用不同的方法吗?
由于
答案 0 :(得分:1)
这是有效的@Path
:
@Path("customer/{id}") // (1)
这些不是:
@Path("customer?id={id}") // (2)
@Path("customer?name={name}") // (3)
它们是相同的,因为归结为
@Path("customer")
你可以使用。
因此,您可以拥有(1)
以及(2)
和(3)
之一。但是不能同时拥有(2)
和(3)
。
@QueryParam
个参数不是@Path
的一部分。您可以访问它们,就像您在方法的签名中一样,但是您不能将JAX-RS的路由基于它们。
修改强>
您可以编写一个方法,同时接受id
和name
作为@QueryParam
。这些查询参数是可选的。
@Path("customer")
public Response get(@QueryParam("id") final String id,
@QueryParam("name") final String name) {
// Look up the Customers based on 'id' and/or 'name'
}