JAX-RSの違いは何ですか@QueryParam
および@MatrixParam
?ドキュメントから。queryparamとmatrixparamはどちらも、特別な条件で1つのリソースを特定できます。では、ユースケースの違いは何ですか?
pS:
Queryparam:
url ? key=value;
Matrixparam
url; key=value;
この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パターンと結果を参照してください。
URIパターン:“/books/2012 /”
getBooksが呼び出され、年:2012、作成者:null、国:null
URIパターン:“/books/2012; author = andih”
getBooksが呼び出され、年:2012、作成者:andih、国:null
URIパターン:“/books/2012; author = andih; country = germany”
getBooksが呼び出され、年:2012、作成者:andih、国:ドイツ
URIパターン:“/books/2012; country = germany; author = andih”
getBooksが呼び出され、年:2012、作成者:andih、国:ドイツ
違いの説明については、 RLマトリックスパラメーターとリクエストパラメーター をご覧ください。
@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=fruits
はgroceryリソースのみに適用されます同じrange=300
はpriceリソースのみに適用されますが、ページ付けのクエリパラメータlimit=10
はリクエストURL全体に適用されます。そして、はい、クエリパラメータのみが使用された場合、「grocery_type」や「grocery_price」などのパラメータが作成され、リクエスト内のパラメータの局所性によって追加された明瞭さが失われます。