tags:

views:

170

answers:

2

What I'm looking for specifically is some code in Java that will take a Map object and convert it into a query string that I can append to a URL I return. I'm sure there's a library that does this and much more, but I can't find it with a quick Google search. Anyone know of one that will do this?

+1  A: 

There's this online, so you can simply call any of:

InputStream serverInput = post(URL url, Map parameters); 
InputStream serverInput = post(URL url, Map parameters); 
InputStream serverInput = post(URL url, Map cookies, Map parameters); 
InputStream serverInput = post(URL url, String[] cookies, Object[] parameters); 
InputStream serverInput = post(URL url, Object[] parameters).

He provides the source code too.

Milan Ramaiya
+3  A: 

I found apache httpcomponents to be a solid and versatile library for dealing with HTTP in Java. However, here's a sample class, which might suffice for building URL query strings:

import java.net.URLEncoder;

public class QueryString {

    private String query = "";

    public QueryString(HashMap<String, String> map) {
        Iterator it = mp.entrySet().iterator();
        while (it.hasNext()) {
           Map.Entry pairs = (Map.Entry)it.next();
           query += URLEncoder.encode(pairs.getKey()) + "=" +         
           URLEncoder.encode(pairs.getValue());
           if (it.hasNext()) { query += "&"; }
        }
    }

    public QueryString(Object name, Object value) {
        query = URLEncoder.encode(name.toString()) + "=" +         
           URLEncoder.encode(value.toString());
   }

   public QueryString() { query = ""; }

   public synchronized void add(Object name, Object value) {
       if (!query.trim().equals("")) query += "&";
       query += URLEncoder.encode(name.toString()) + "=" +         
           URLEncoder.encode(value.toString());
   }

   public String toString() { return query; }
}

Usage:

HashMap<String, String> map = new HashMap<String, String>();
map.put("hello", "world");
map.put("lang", "en");

QueryString q = new QueryString(map);
System.out.println(q);
// => "hello=world&lang=en"
The MYYN
Looks good! However, I strongly recommend that you use generics in your code!
notnoop
I'm going to accept this, but yah the <code>URLEncoder.encode(String s)</code> method is deprecated in favor of one that takes a format argument as well. Other than that, this is great, thanks.
Bialecki