我希望能够将 GET 请求传递给我的服务器,例如:
http://example.com/?a[foo]=1&a[bar]=15&b=3
当我得到查询参数'a'时,它应该被解析为HashMap,如下所示:
{'foo':1, 'bar':15}
编辑:好的,要清楚,这是我想要做的,但在 Java 中,而不是 PHP:
任何想法如何做到这一点?
我希望能够将 GET 请求传递给我的服务器,例如:
http://example.com/?a[foo]=1&a[bar]=15&b=3
当我得到查询参数'a'时,它应该被解析为HashMap,如下所示:
{'foo':1, 'bar':15}
编辑:好的,要清楚,这是我想要做的,但在 Java 中,而不是 PHP:
任何想法如何做到这一点?
您可以通过将 JSON 对象附加到 URL 来将其作为字符串传递。但在此之前,您需要对其进行编码,您可以使用此链接 http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_encodingUtil.htm中给出的方法 进行编码,然后将 json 对象附加为任何其他字符串
没有标准的方法可以做到这一点。
眨眼支持javax.ws.rs.core.MultivaluedMap
。因此,如果您发送类似http://example.com/?a=1&a=15&b=3
您将收到的内容:键值a
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);
}
或者,如果您使用的是 HttpServletRequest,那么您可以使用 getParameterMap() 方法,该方法为您提供所有参数及其值作为映射。
例如
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
System.out.println("Parameters : \n"+request.getParameterMap()+"\n End");
}