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

前端 未结 4 1277
孤独总比滥情好
孤独总比滥情好 2021-02-05 06:27

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

4条回答
  •  渐次进展
    2021-02-05 07:01

    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;
    

提交回复
热议问题