用 java 解析 URL

Parse URL with java

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

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

第一个ID是请求文件的ID,参数中的人数是事先不知道的。我想把这个人分组在 collection/map 中。

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]}

你的查询字符串有误,“&”是参数分隔符。

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

我还看到您正试图在 URL 中同时拥有两条记录,这不可能在查询字符串中包含对象记录。为此,请使用 POST 方法及其主体。