我希望能够向我的服务器传递一个 GET 请求,例如:
http://example.com/?a[foo]=1&a[bar]=15&b=3
当我得到查询参数 'a' 时,它应该像这样被解析为 HashMap:
{'foo':1, 'bar':15}
编辑:好的,要清楚,这是我正在尝试做的,但在 Java 中,而不是 PHP:
Pass array with keys via HTTP GET
有什么想法可以实现吗?
最佳答案
没有标准的方法可以做到这一点。
Wink 支持 javax.ws.rs.core.MultivaluedMap
。
因此,如果您发送类似 http://example.com/?a=1&a=15&b=3
的内容,您将收到:key a
values 1, 15;键 b
值 3.
如果你需要解析像 ?a[1]=1&a[gv]=15&b=3
这样的东西,你需要使用 javax.ws.rs.core.MultivaluedMap.entrySet ()
并执行额外的键解析。
以下是您可以使用的代码示例(未对其进行测试,因此可能包含一些小错误):
String getArrayParameter(String key, String index, MultivaluedMap<String, String> queryParameters) {
for (Entry<String, List<String>> entry : queryParameters.entrySet()) {
String qKey = entry.getKey();
int a = qKey.indexOf('[');
if (a < 0) {
// not an array parameter
continue;
}
int b = qKey.indexOf(']');
if (b <= a) {
// not an array parameter
continue;
}
if (qKey.substring(0, a).equals(key)) {
if (qKey.substring(a + 1, b).equals(index)) {
return entry.getValue().get(0);
}
}
}
return null;
}
在您的资源中,您应该这样调用它:
@GET
public void getResource(@Context UriInfo uriInfo) {
MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();
getArrayParameter("a", "foo", queryParameters);
}
关于java - 如何获取查询参数作为 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197559/