web-dev-qa-db-ja.com

Java 6インターフェイスMultivaluedMapはどのような用途ですか?

Java 6インターフェイス MultivaluedMap

11
malatesh

インターフェイスは「Java」に属していません。つまり、インターフェイスはコアライブラリの一部ではありません。これは、 JAX-RS 仕様の一部であるjavax.ws.rs階層の一部です。 Jersey などの仕様を実装するフレームワークで使用されます。これは、マップが単一の値だけでなく、任意の数の値を参照する必要がある場合に使用されます。使用例としては、たとえば、キーごとに複数の値を追加したいリクエストヘッダーのストレージがあります。または、null値と比較して、空のリストを処理する方が簡単な場合でも、キーがありません。

このHTTPヘッダーを例にとってみましょう。

Accept-Encoding:compress; q = 0.5、gzip; q = 1.0

これをモデル化する

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

ジャージーの内部。このタイプの複数値ストレージは、Javaの一般的な問題であり、 Guava などの他のマップの実装者によって対処されます。

これは基本的にjavadocが言うことです:

キーと値のペアのマップ。各キーは0個以上の値を持つことができます。

27

そのキーと値のペアのマップ。各キーはゼロまたは複数の値を持つことができます

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

MultivaluedMapの適切な使用法は、UriInfoを使用することです。複数のQueryParamを取り込むRESTエンドポイントを記述している場合、UriInfoを使用してすべてのパラメーターを取得し、getQuery()呼び出しを使用してそれらを抽出できます。例:

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

MultivaluedMapは、複数の値を持つパラメーターを持つことができるので便利です。たとえば、それが顧客データベースであり、複数の顧客を取得したい場合、マップには「customerID」のキーとそれにリンクされたいくつかの値があります。

0
LConrad

MultiValuedMapは、CoreJavaではなくjavax.ws.rs.coreパッケージの一部です。これは主に、リクエストでヘッダー値を保存して使用するために使用されています

private MediaType getMediaType(Class entityClass、Type entityType、MultivaluedMap headers){final Object mediaTypeHeader = headers.getFirst( "Content-Type"); ....}

また、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