2012-04-17 6 views

Respuesta

13

Como se indica en this Oracle documentation:

El @PathParam y las otras anotaciones basadas en parámetros, @MatrixParam, @HeaderParam, @CookieParam, @FormParam obedecer las mismas reglas que @QueryParam. @MatrixParam extrae información de segmentos de ruta URL. @HeaderParam extrae información de los encabezados HTTP . @CookieParam extrae información de las cookies declaradas en encabezados HTTP relacionados con cookies.

Ejemplo (extraído de 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(); 

    } 

} 

Ver siguiendo patrones de URI y resultado:

  1. patrón URI: “/ libros/2012 /”

    Se llama getBooks, año: 2012, autor: null, país: null

  2. patrón URI: “/ libros/2012; autor = andih”

    getBooks se llama, año: 2012, autor: andih, país: null

  3. URI patrón: “/ libros/2012; autor = andih; país = alemania”

    getBooks se llama, año: 2012, autor: andih, país: Alemania

  4. URI Patrón: “/ libros/2012; país = alemania; autor = andih”

    getBooks se llama, año: 2012, autor: andih, país: Alemania

Para una explicación de la diferencia que puede echar un vistazo a URL matrix parameters vs. request parameters

+15

buena respuesta, pero no veo aquí las diferencias entre Matrix y Query ... – OhadR

+0

Puede encontrar una muy buena explicación de un parámetro de matriz en la respuesta de Tim Sylvester en [parámetros de matriz de URL frente a parámetros de solicitud] (http: //stackoverflow.com/questions/2048121/url-matrix-parameters-vs-request-parameters). El enlace ya fue proporcionado como parte de mi respuesta. – andih

+0

+1 para su respuesta concisa y clara. –

5

la anotación @MatrixParam se aplicará a los recursos presentes en particular, URL y @QueryParam se aplicará a la URL de solicitud completa.

Tomemos un ejemplo de cualquier supermercado, Si desea que todas las frutas que serán satisfechos múltiples condiciones como type = frutas y rango de precio que se inicia desde 300 y la lista fuera hacer juego 10 frutos, se puede ir por debajo de la API de diseño,

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

En el ejemplo anterior, la primera Matriz de parámetros de type=fruits está aplicando sólo a comestibles recursos range=300 mismo se aplica sólo a precio recursos de consulta, pero Param para paginación limit=10 se aplica a toda petición de URL. Y sí, si solo se usaran parámetros de consulta, terminaría con parámetros como "grocery_type" y "grocery_price" y perdería la claridad agregada por la localidad de los parámetros dentro de la solicitud.

Cuestiones relacionadas