java - 如何获取查询参数作为 HashMap

标签 java jax-rs apache-wink

我希望能够向我的服务器传递一个 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/

相关文章:

apache-wink - Apache Wink Accept() 失败并出现 NullPointerException

java - 眨眼 : how to use spring life cycle management?

java - 如何在 JTextArea 中添加垂直和水平滚动条以查看完整文件 - JAVA

java 正则表达式 逗号分隔的数字

jax-rs - 在 quarkus 中检索客户端 IP 地址

java - 缺少方法 public javax.ws.rs.core.Response (上传文件 JAX-RS)的依赖项

java - 用iBatis映射父子关系

java - 在 Java 中使用 X.509 智能卡证书和 iText 对 PDF 进行签名

java - 使用 jax-rs 发送临时文件