Java 6接口MultivaluedMap有什么用?
答案 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");
}