使用java解析URL

时间:2016-04-26 15:00:47

标签: java string string-parsing

我正在尝试创建一个简单的REST Web服务器。实际的URL看起来像这样

  

http://localhost:8080/Server/files/file?id=34?firstname=alex?lastname=ozouf?age=33?firstname=kevin?lastname=gerfild?age=27

第一个ID是所请求文件的ID,参数中的人数事先不知道。我想将这个人分组在一个集合/地图中。

以这种方式构建URL并不是强制性的。我也可以使用这个URL,如果它可以使它更容易

  

http://localhost:8080/Server/files/file?id=34?firstname1=alex?lastname1=ozouf?age1=33?firstname2=kevin?lastname2=gerfild?age2=27

我试图改编这些codes,但作为一个新手,我真的很困惑。

这是我的代码

System.out.println(query);
final Map<String, List<String>> query_pairs = new LinkedHashMap<String, List<String>>();
final String[] pairs = query.split("&");
for (String pair : pairs) {
    final int idx = pair.indexOf("=");
    final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;
    if (!query_pairs.containsKey(key)) {
        query_pairs.put(key, new LinkedList<String>());
    }
    final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : null;
    query_pairs.get(key).add(value);
    System.out.println(query_pairs);

这是我得到的输出

{id=[23?firstname1=alex]}
{id=[23?firstname1=alex], lastname1=[ozouf]}
{id=[23?firstname1=alex], lastname1=[ozouf], age1=[23?firstname=kevin]}
{id=[23?firstname1=alex], lastname1=[ozouf], age1=[23?firstname=kevin], lastname=[gefild?age=22]}

1 个答案:

答案 0 :(得分:0)

您的查询字符串“&amp;”错误是参数分隔符。

http://localhost:8080/Server/files/file?id=34&firstname=alex&lastname=ozouf&age=33&firstname=kevin&lastname=gerfild&age=27

此外,我发现您正在尝试在URL中同时拥有两条记录,这些记录不可能包含在查询字符串中的对象记录中。为此,请使用POST方法及其正文。