web-dev-qa-db-ja.com

JAX-RSのQueryParamとMatrixParamの違いは何ですか?

JAX-RSの違いは何ですか@QueryParamおよび@MatrixParam?ドキュメントから。queryparamとmatrixparamはどちらも、特別な条件で1つのリソースを特定できます。では、ユースケースの違いは何ですか?

pS:

Queryparam:

url ? key=value;

Matrixparam

url; key=value;

25
jiafu

このOracleドキュメント で述べたように:

@PathParamとその他のパラメータベースのアノテーション@MatrixParam@HeaderParam@CookieParam@FormParamは、@QueryParamと同じルールに従います。 @MatrixParamは、URLパスセグメントから情報を抽出します。 @HeaderParamは、HTTPヘッダーから情報を抽出します。 @CookieParamは、Cookie関連のHTTPヘッダーで宣言されたCookieから情報を抽出します。

例( 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、国:null

  3. URIパターン:“/books/2012; author = andih; country = germany”

    getBooksが呼び出され、年:2012、作成者:andih、国:ドイツ

  4. URIパターン:“/books/2012; country = germany; author = andih”

    getBooksが呼び出され、年:2012、作成者:andih、国:ドイツ

違いの説明については、 RLマトリックスパラメーターとリクエストパラメーター をご覧ください。

14
andih

@MatrixParamアノテーションはURLに存在する特定のリソースに適用され、@QueryParamはリクエストURL全体に適用されます。

スーパーマーケットの例を見てみましょう。type= fruitsのような複数の条件を満たすすべての果物が必要で、価格範囲が300から始まり、一致する10の果物をリストする場合は、以下のAPI設計に進むことができます。

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

上記の例では、最初のMatrix Param type=fruitsgroceryリソースのみに適用されます同じrange=300priceリソースのみに適用されますが、ページ付けのクエリパラメータlimit=10はリクエストURL全体に適用されます。そして、はい、クエリパラメータのみが使用された場合、「grocery_type」や「grocery_price」などのパラメータが作成され、リクエスト内のパラメータの局所性によって追加された明瞭さが失われます。

15
Hardik Patel