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?
- 1I had the same question: stackoverflow.com/questions/1405731/… . No good answer though. :-/Steven Huwig– Steven Huwig2009-12-07 19:40:26 +00:00Commented Dec 7, 2009 at 19:40
- See also leveluplunch.com/java/examples/construct-build-uri and quora.com/….Vadzim– Vadzim2016-03-11 17:01:03 +00:00Commented Mar 11, 2016 at 17:01
- Possible duplicate of What is the idiomatic way to compose a URL or URI in Java?Nick Grealy– Nick Grealy2017-04-13 05:03:07 +00:00Commented Apr 13, 2017 at 5:03
Add a comment |
3 Answers
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" 3 Comments
notnoop
Looks good! However, I strongly recommend that you use generics in your code!
Bialecki
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.
Sled
@miku is there a class in HttpComponents that does what your code does?
Try URIBuilder from Apache Http Compoments (HttpClient 4).
It does not actually take a map, but is well suited for building URIs.
Comments
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.