Java 6接口MultivaluedMap有什么用?

时间:2014-03-11 11:16:05

标签: java data-structures jax-rs java-6

Java 6接口MultivaluedMap有什么用?

4 个答案:

答案 0 :(得分:24)

该接口不属于" Java",这意味着该接口不是核心库的一部分。它是javax.ws.rs层次结构的一部分,它是JAX-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所说的:

  

键值对的映射。每个键可以有零个或多个值。

答案 1 :(得分:1)

它是键值对的映射。每个键可以有零个或多个值

public interface MultivaluedMap<K,V> extends java.util.Map<K,java.util.List<V>>

答案 2 :(得分:0)

使用UriInfo可以很好地利用MultivaluedMap。如果您正在编写一个接收多个QueryParams的REST端点,则可以使用UriInfo获取所有参数并使用getQuery()调用来提取它们。例如:

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

MultivaluedMap非常有用,因为您可以使用具有多个值的参数。例如,如果它是一个客户数据库,并且您希望获得多个客户,那么您的地图将具有“customerID”键和与其链接的多个值。

答案 3 :(得分:0)

MultiValuedMap是javax.ws.rs.core包的一部分,而不是Core Java。它主要用于在请求中存储Headers值并使用它

private MediaType getMediaType(Class entityClass,Type entityType,         MultivaluedMap标头){     final Object mediaTypeHeader = headers.getFirst(&#34; Content-Type&#34;); .... }

它在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");
}
相关问题