Java 如何创建包含映射的查询字符串?(爪哇)

Java 如何创建包含映射的查询字符串?(爪哇),java,python,apache-commons-httpclient,Java,Python,Apache Commons Httpclient,我需要用Java调用这个服务- https://api.semantics3.com/test/v1/products?q={"cat_id": "13658", "brand": "Toshiba", "model": "Satellite"} 我在python中成功地做到了以下几点- class Semantics: def __init__(self): self.service_address = 'https://api.semantics3.com/tes

我需要用Java调用这个服务-

https://api.semantics3.com/test/v1/products?q={"cat_id": "13658", "brand": "Toshiba", "model": "Satellite"}
我在python中成功地做到了以下几点-

class Semantics:
    def __init__(self): 
        self.service_address = 'https://api.semantics3.com/test/v1/products?'
        self.api_key = 'SEM3158A71D4AB3A3715C2230B96943F46D0'
    def query(self, params):
        query = 'q=' + params.__dict__.__str__().replace("'",'"')
        query = urlencode(urlparse.parse_qs(query), True)
        req = Request(url = self.service_address + query)
        req.add_header('api_key', self.api_key)        
        return urlopen(req).read()

class QueryParams:
    def __init__(self, cat_id, model, brand):
        self.cat_id = cat_id
        self.model = model
        self.brand = brand

qp = QueryParams('13658', 'Satellite', "Toshiba")
print Semantics().query(qp)
我曾经尝试过使用
springrestapi
apachehttpclient
编写一个等效的Java程序,但没有成功。我找不到将字典(即映射)设置为查询字符串的方法

public static void main(String[] args) {
    String uri = "https://api.semantics3.com/test/v1/products?";

    HttpClient hc = new HttpClient();
    GetMethod method = new GetMethod(uri);

    method.getParams().setParameter("q", "Toshiba");//How do I insert a Map here?

    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
            new DefaultHttpMethodRetryHandler(3, false));

    method.setRequestHeader("api_key", "SEM2158A71D4AB3A3715C2435B96943F46D0");     
    try {
        int statusCode = hc.executeMethod(method);
        System.out.println(statusCode);
        byte[] responseBody = method.getResponseBody();
        System.out.println(new String(responseBody));
    } catch (HttpException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        method.releaseConnection();
    }
}

在最低级别,我可以通过连接手动生成查询字符串,然后对其进行Url编码。但是有没有更优雅的方法呢?

我认为您可以使用外部jar将
映射
转换为JSON

Map<String, String> map = new HashMap<String,String>();
map.put("cat_id", "12345");
看看


从中可以看到,它使用对象构建请求url并反序列化响应主体。还向您展示如何具体反序列化JSON,您可以选择JSON库。

您的q格式是JSON,为什么不使用JSON库来获取您的值?
Gson gson = new Gson();
method.getParams().setParameter("q", gson.toJson(map));