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(); } ```