2009-12-07 37 views
19

我在找什么特别是一些Java代码,将采取Map对象,并将其转换为一个查询字符串,我可以追加到我返回的URL。我确信有一个图书馆可以做到这一点以及更多,但我无法通过Google的快速搜索找到它。任何人都知道一个会这样做?是否有Java包来处理建筑物的URL?

+1

我有同样的问题:http://stackoverflow.com/questions/1405731/is-there-a-java-method-that-encodes-a-collection-of-parameters-as-a-url-query -com。虽然没有很好的答案。 : -/ – 2009-12-07 19:40:26

+0

另请参阅http://www.leveluplunch.com/java/examples/construct-build-uri/和https://www.quora.com/Is-there-an-open-source-URL-manipulation -library-中的Java。 – Vadzim 2016-03-11 17:01:03

+0

[在Java中编写URL或URI的惯用方法是什么?](http://stackoverflow.com/questions/883136/what-is-the-idiomatic-way-to-compose-a-url -or-uri-in-java) – 2017-04-13 05:03:07

回答

11

我发现apache httpcomponents是一个用于处理Java中HTTP的实体和多功能库。但是,这里有一个示例类,这可能足以满足建筑URL查询字符串:

import java.net.URLEncoder; 

public class QueryString { 

    private String query = ""; 

    public QueryString(HashMap<String, String> map) { 
     Iterator it = mp.entrySet().iterator(); 
     while (it.hasNext()) { 
      Map.Entry pairs = (Map.Entry)it.next(); 
      query += URLEncoder.encode(pairs.getKey(), "utf-8") + "=" + 
      URLEncoder.encode(pairs.getValue(), "utf-8"); 
      if (it.hasNext()) { query += "&"; } 
     } 
    } 

    public QueryString(Object name, Object value) { 
     query = URLEncoder.encode(name.toString(), "utf-8") + "=" + 
      URLEncoder.encode(value.toString(), "utf-8"); 
    } 

    public QueryString() { query = ""; } 

    public synchronized void add(Object name, Object value) { 
     if (!query.trim().equals("")) query += "&"; 
     query += URLEncoder.encode(name.toString(), "utf-8") + "=" + 
      URLEncoder.encode(value.toString(), "utf-8"); 
    } 

    public String toString() { return query; } 
} 

用法:

HashMap<String, String> map = new HashMap<String, String>(); 
map.put("hello", "world"); 
map.put("lang", "en"); 

QueryString q = new QueryString(map); 
System.out.println(q); 
// => "hello=world&lang=en" 
+0

看起来不错!不过,我强烈建议您在代码中使用泛型! – notnoop 2009-12-07 18:44:12

+0

我打算接受这个,但是yar URLEncoder.encode(String s)方法不赞成使用格式参数。除此之外,这很好,谢谢。 – Bialecki 2009-12-08 01:27:36

+0

@miku在HttpComponents中有一个类来完成你的代码的功能吗? – ArtB 2012-10-17 19:45:55

1

this在线,所以你可以简单地调用任何的:

InputStream serverInput = post(URL url, Map parameters); 
InputStream serverInput = post(URL url, Map parameters); 
InputStream serverInput = post(URL url, Map cookies, Map parameters); 
InputStream serverInput = post(URL url, String[] cookies, Object[] parameters); 
InputStream serverInput = post(URL url, Object[] parameters). 

他提供的源代码了。