web-dev-qa-db-fra.com

Quelle est l'utilisation de l'interface MultivaluedMap de Java 6?

Quelle utilisation est l'interface Java 6 MultivaluedMap ?

11
malatesh

L'interface n'appartient pas à "Java", ce qui signifie qu'elle ne fait pas partie des bibliothèques principales. Il fait partie de la hiérarchie javax.ws.rs qui fait partie de la spécification JAX-RS . Il est utilisé par les frameworks implémentant la spécification tels que Jersey . Il est utilisé chaque fois que les cartes doivent faire référence non seulement à une valeur unique, mais à un nombre quelconque de valeurs. Un exemple d'utilisation serait, par exemple, le stockage d'un en-tête de demande dans lequel vous voudrez peut-être ajouter plusieurs valeurs par clé. Ou même pas de clé dans certains cas où il est plus facile de gérer une liste vide par rapport à une valeur null.

Prenez cet en-tête HTTP par exemple:

Accepter-coder: compresser; q = 0,5, gzip; q = 1,0

Vous modéliseriez ceci en

MultivaluedMap<String, String> map = ...
map.add("Accept-Encoding", "compress;q=0.5");
map.add("Accept-Encoding", "gzip;q=1.0");

en interne à Jersey. Ce type de stockage à valeurs multiples est un problème courant en Java qui est traité par d'autres implémenteurs de cartes telles que Guava .

C'est essentiellement ce que dit le javadoc:

Une carte de paires de valeurs-clés. Chaque clé peut avoir zéro valeur ou plus.

24

C'est une carte de paires de valeurs-clés. Chaque clé peut avoir zéro ou plusieurs valeurs

public interface MultivaluedMap<K,V> extends Java.util.Map<K,Java.util.List<V>>
1
Arjit

UriInfo est une bonne utilisation de MultivaluedMap. Si vous écrivez un noeud final REST prenant en charge plusieurs QueryParams, vous pouvez utiliser UriInfo pour obtenir tous les paramètres et les extraire à l'aide de l'appel getQuery (). Par exemple:

public void get(@Context UriInfo ui) {
  MultivaluedMap params = ui.getRequestUri().getQuery();
  // now do what you want with your params
}

MultivaluedMap est utile car vous pouvez avoir des paramètres avec plusieurs valeurs. Par exemple, s'il s'agissait d'une base de données client et que vous souhaitiez obtenir plusieurs clients, votre carte aurait la clé "customerID" et plusieurs valeurs qui lui sont associées. 

0
LConrad

MultiValuedMap fait partie du package javax.ws.rs.core et non de Core Java. Il est principalement utilisé pour stocker la valeur des en-têtes dans la demande et pour l'utiliser

private MediaType getMediaType (Classe entityClass, Type entityType, en-têtes MultivaluedMap) { Objet final mediaTypeHeader = headers.getFirst ("Content-Type"); .... }

En outre, il est très utile dans UriInfo

private String getJsonpFunctionName(){
    UriInfo uriInfo = getUriInfo();
    if (uriInfo == null) {
        return null;
    }

    MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();
    if (queryParameters == null) {
        return null;
    }
    return queryParameters.getFirst("jsonp");
}
0
Chitrapal Singh