JAX-RS中QueryParam和MatrixParam有什么区别?
JAX-RS @QueryParam
和@MatrixParam
什么@MatrixParam
? 从文档中,queryparam和matrixparam都可以在一个特殊条件下定位一个资源。 那么用例区别是什么?
PS:
Queryparam:
url ? key=value;
Matrixparam
url; key=value;
如本Oracle文档中所述 :
@PathParam
和其他基于参数的注释@MatrixParam
,@HeaderParam
,@CookieParam
,@FormParam
遵循与@FormParam
相同的规则。@MatrixParam
从URL路径段中提取信息。@HeaderParam
从HTTP头中提取信息。@CookieParam
从cookie相关HTTP头中声明的cookie中提取信息。
示例(从这里得出):
@Path("/books") public class BookService { @GET @Path("{year}") public Response getBooks(@PathParam("year") String year, @MatrixParam("author") String author, @MatrixParam("country") String country) { return Response .status(200) .entity("getBooks is called, year : " + year + ", author : " + author + ", country : " + country) .build(); } }
请参阅以下URI模式和结果:
-
URI模式: “/ books / 2012 /”
getBooks被调用,年份:2012年,作者:null,国家:null
-
URI模式: “/ books / 2012; author = andih”
getBooks被称为,年份:2012年,作者:andih,country:null
-
URI模式: “/ books / 2012; author = andih; country = germany”
getBooks被称为,年份:2012年,作者:andih,国家:德国
-
URI模式: “/ books / 2012; country = germany; author = andih”
getBooks被称为,年份:2012年,作者:andih,国家:德国
有关差异的解释,您可以查看URL矩阵参数与请求参数
@MatrixParam
注释将应用于URL中存在的特定资源,@QueryParam
将应用于整个请求URL。
举一个超市的例子,如果你想要满足多种条件的所有水果,如类型=水果和价格范围从300开始并列出匹配的10个水果,你可以去下面的API设计,
http://dev.brandstore.com/inventory/grocery;type=fruits/price;range=300/?limit=10
在上面的示例中,第一个Matrix Param type=fruits
仅适用于杂货资源相同range=300
仅适用于价格资源,但分页limit=10
查询参数适用于整个请求URL。 是的,如果只使用查询参数,你最终会得到像“grocery_type”和“grocery_price”这样的参数,你会失去请求中参数局部性所增加的清晰度。