21

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?

3

3 Answers 3

12

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(), "utf-8") + "=" + URLEncoder.encode(pairs.getValue(), "utf-8"); if (it.hasNext()) { query += "&"; } } } public QueryString(Object name, Object value) { query = URLEncoder.encode(name.toString(), "utf-8") + "=" + URLEncoder.encode(value.toString(), "utf-8"); } public QueryString() { query = ""; } public synchronized void add(Object name, Object value) { if (!query.trim().equals("")) query += "&"; query += URLEncoder.encode(name.toString(), "utf-8") + "=" + URLEncoder.encode(value.toString(), "utf-8"); } 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" 
Sign up to request clarification or add additional context in comments.

3 Comments

Looks good! However, I strongly recommend that you use generics in your code!
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.
@miku is there a class in HttpComponents that does what your code does?
6

Try URIBuilder from Apache Http Compoments (HttpClient 4).

It does not actually take a map, but is well suited for building URIs.

Comments

1

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.