【问题标题】:What use is Java 6 interface MultivaluedMap?Java 6接口MultivaluedMap有什么用?
【发布时间】:2014-03-11 11:16:05
【问题描述】:

Java 6接口MultivaluedMap有什么用?

【问题讨论】:

  • 他在询问使用这种功能的场景。
  • 我可以看到它很少使用,我对用例感兴趣?

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


【解决方案1】:

接口不属于“Java”,这意味着该接口不是核心库的一部分。它是javax.ws.rs 层次结构的一部分,它是JAX-RS 规范的一部分。它由实现规范的框架使用,例如Jersey。每当地图不仅应该引用单个值,而且应该引用任意数量的值时,都会使用它。一个使用示例是请求标头的存储,您可能希望在其中为每个键添加多个值。或者在某些情况下甚至没有键,与null 值相比,处理空列表更容易。

以这个 HTTP-header 为例:

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 所说的:

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

【讨论】:

  • 这里是一个如何初始化它的例子:MultivaluedMap&lt;String, String&gt; map = new MultivaluedMapImpl();
【解决方案2】:

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

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

【讨论】:

  • Op 要求的用途不是定义
【解决方案3】:

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”键和与其相关联的多个值。

【讨论】:

  • 次要评论 - 认为调用应该是 getQueryParameters()。
【解决方案4】:

MultiValuedMapjavax.ws.rs.core 包的一部分,而不是Core Java。主要用于存储请求中的Headers值

private MediaType getMediaType(Class entityClass, Type entityType, MultivaluedMap<String, Object> 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");
}

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 2015-02-04
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2015-03-19
    • 2011-03-05
    相关资源
    最近更新 更多