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
Stumbled across this, and figured I'd toss a Java 8 / Streams implementation out here, whilst adding a few extra bits (not in previous answers).
Extra 1: I've added a filter to avoid processing any empty params. Something that should not happen, but it allows a cleaner implementation vs. not handling the issue (and sending an empty response). An example of this would look like ?param1=value1¶m2=
Extra 2: I've leveraged String.split(String regex, int limit) for the second split operation. This allows a query parameter such as ?param1=it_has=in-it&other=something
to be passed.
public static Map getParamMap(String query) {
// query is null if not provided (e.g. localhost/path )
// query is empty if '?' is supplied (e.g. localhost/path? )
if (query == null || query.isEmpty()) return Collections.emptyMap();
return Stream.of(query.split("&"))
.filter(s -> !s.isEmpty())
.map(kv -> kv.split("=", 2))
.collect(Collectors.toMap(x -> x[0], x-> x[1]));
}
Imports
import java.util.Map;
import java.util.Collections;
import java.util.stream.Stream;
import java.util.stream.Collectors;