2012-04-17 7 views

Odpowiedz

13

Zgodnie this Oracle documentation:

@PathParam i inne adnotacje parametrów opartych @MatrixParam, @HeaderParam, @CookieParam, @FormParam przestrzegać same zasady jak @QueryParam. @MatrixParam wyodrębnia informacje z segmentów ścieżki adresów URL od . @HeaderParam wyodrębnia informacje z nagłówków HTTP . @CookieParam wyodrębnia informacje z plików cookie zadeklarowanych jako w nagłówkach HTTP związanych z plikami cookie.

Przykład (wyciągnąć 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(); 

    } 

} 

Patrz wzorach URI, a wynik:

  1. URI Wzór: „/ książki/2012 /”

    getBooks nazywa się rok: 2012, autor: null, kraj: null

  2. URI Wzór: „/ książki/2012; autor = andih”

    getBooks nazywa, rok produkcji: 2012, autor: andih, kraj: null

  3. URI Wzór: „/ książki/2012; autor = andih; kraj = Niemcy”

    getBooks nazywa, rok produkcji: 2012, autor: andih, Kraj: Niemcy

  4. URI Wzór: „/ książki/2012; kraj = Niemcy; autor = andih”

    getBooks nazywa, rok produkcji: 2012, autor: andih, Kraj: Niemcy

dla wyjaśnienie różnicy może trzeba spojrzeć na URL matrix parameters vs. request parameters

+15

Dobra odpowiedź, ale nie widzę tu różnic między Matrix a Query ... – OhadR

+0

Możesz znaleźć bardzo dobre wyjaśnienie paramateru macierzy w odpowiedzi Tima Sylvestera w [Parametry matrycy URL vs. parametry żądania] (http: //stackoverflow.com/questions/2048121/url-matrix-parameters-vs-request-parameters). Link został już dostarczony jako część mojej odpowiedzi. – andih

+0

+1 za zwięzłą i jasną odpowiedź. –

5

@MatrixParam adnotacji będą miały zastosowanie do określonego zasobu w obecnej URL i @QueryParam będzie mieć zastosowanie do całego adresu URL żądania.

Weź przykład każdym supermarkecie, Jeśli chcesz, aby wszystkie owoce, które zostaną spełnione wiele warunków, takich jak typ = owoców i zakres cenowy zaczyna się od 300 i wymienić się dopasowując 10 owoców, można przejść do poniżej API Design,

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

W powyższym przykładzie, pierwszy Matrix Param type=fruits ubiega się tylko spożywczym zasób sama range=300 ubiega się tylko cenie zasobów ale Zapytanie Param dla paginacji limit=10 ubiega się cały URL żądania. I tak, gdyby użyto tylko parametrów zapytania, otrzymalibyśmy parametry takie jak "grocery_type" i "grocery_price", a straciłbyś jasność dodaną przez lokalizację parametrów w żądaniu.

Powiązane problemy