JAX-RS中QueryParam和MatrixParam有什么区别?

时间:2012-04-17 01:23:50

标签: java jax-rs

JAX-RS @QueryParam@MatrixParam之间有什么区别? 从文档中,queryparam和matrixparam都可以在特殊条件下定位一个资源。那么用例差异是什么?

ps:

Queryparam:

url ? key=value;

Matrixparam

url; key=value;

2 个答案:

答案 0 :(得分:13)

this Oracle documentation中所述:

  

@PathParam和其他基于参数的注释,   @MatrixParam@HeaderParam@CookieParam@FormParam遵守   与@QueryParam相同的规则。 @MatrixParam从中提取信息   网址路径段。 @HeaderParam从HTTP中提取信息   头。 @CookieParam从声明的cookie中提取信息   在cookie相关的HTTP标题中。

示例(摘自here):

@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模式和结果:

  1. URI模式:“/ books / 2012 /”

    getBooks被调用,年份:2012年,作者:null,国家:null

  2. URI模式:“/ books / 2012; author = andih”

    getBooks被称为,年份:2012,作者:andih,country:null

  3. URI模式:“/ books / 2012; author = andih; country = germany”

    getBooks被称为,年份:2012年,作者:andih,国家:德国

  4. URI模式:“/ books / 2012; country = germany; author = andih”

    getBooks被称为,年份:2012年,作者:andih,国家:德国

  5. 有关差异的解释,您可以查看 URL matrix parameters vs. request parameters

答案 1 :(得分:11)

  

@MatrixParam注释将应用于URL和中存在的特定资源   @QueryParam将适用于整个请求网址。

举一个超市的例子,如果你想要满足多种条件的所有水果,比如类型=水果和价格范围从300开始,列出匹配的10个水果,你可以去下面的API设计,

http://dev.brandstore.com/inventory/grocery;type=fruits/price;range=300/?limit=10

在上面的示例中,第一个Matrix Param type=fruits仅适用于杂货店资源,同一range=300仅适用于价格资源但查询参数用于分页limit=10适用于整个请求网址。是的,如果只使用了查询参数,你最终会得到像" grocery_type"等参数。和" grocery_price"并且您将失去请求中参数的位置所添加的清晰度。