How to obtain the query string in a GET with Java HttpServer/HttpExchange?

get, httpserver, java, query-string

Solution

The following: `httpExchange.getRequestURI().getQuery()`

will return string in format similar to this: `"field1=value1&field2=value2&field3=value3..."`

so you could simply parse string yourself, this is how function for parsing could look like:

public Map<String, String> queryToMap(String query) {
    if(query == null) {
        return null;
    }
    Map<String, String> result = new HashMap<>();
    for (String param : query.split("&")) {
        String[] entry = param.split("=");
        if (entry.length > 1) {
            result.put(entry[0], entry[1]);
        }else{
            result.put(entry[0], "");
        }
    }
    return result;
}

And this is how you could use it:

Map<String, String> params = queryToMap(httpExchange.getRequestURI().getQuery()); 
System.out.println("param A=" + params.get("A"));

Problem

I am trying to create a simple HttpServer in Java to handle GET requests, but when I try to get the GET parameters for a request I noticed the HttpExchange class does not have a method for that. Does anybody know an easy way to read the GET parameters (query string)? This is how my handler looks like: ``` public class TestHandler{ @Override public void handle(HttpExchange exc) throws IOxception { String response = "This is the reponse"; exc.sendResponseHeaders(200, response.length()); // need GET params here OutputStream os = exc.getResponseBody(); os.write(response.getBytes()); os.close(); } } ``` .. and the main method: ``` public static void main(String[] args) throws Exception{ // create server on port 8000 InetSocketAddress address = new InetSocketAddress(8000); HttpServer server = new HttpServer.create(address, 0); // bind handler server.createContext("/highscore", new TestHandler()); server.setExecutor(null); server.start(); } ```

Original source