2009-12-07 21 views
19

Lo que estoy buscando específicamente es un código en Java que tome un objeto Map y lo convierta en una cadena de consulta que puedo adjuntar a una URL que devuelvo. Estoy seguro de que hay una biblioteca que hace esto y mucho más, pero no puedo encontrarlo con una búsqueda rápida en Google. Alguien sabe de uno que hará esto?¿Hay algún paquete de Java para manejar las URLs construidas?

+1

Tuve la misma pregunta: http://stackoverflow.com/questions/1405731/is-there-a-java-method-that-encodes-a-collection-of-parameters-as-a-url-query -com. Sin embargo, no hay una buena respuesta. : -/ –

+0

Vea también http://www.leveluplunch.com/java/examples/construct-build-uri/ y https://www.quora.com/Is-there-an-open-source-URL-manipulation -library-en-Java. – Vadzim

+0

Posible duplicado de [¿Cuál es la forma idiomática de componer una URL o URI en Java?] (Http://stackoverflow.com/questions/883136/what-is-the-idiomatic-way-to-compose-a-url -o-uri-in-java) –

Respuesta

11

Encontré apache httpcomponents como una biblioteca sólida y versátil para tratar con HTTP en Java. Sin embargo, aquí está una clase de muestra, lo que podría ser suficiente para las cadenas de consulta URL edificio:

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

Uso:

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

¡Se ve bien! Sin embargo, ¡le recomiendo que use genéricos en su código! – notnoop

+0

Voy a aceptar esto, pero yah el método URLEncoder.encode(String s) está en desuso en favor de uno que también toma un argumento de formato. Aparte de eso, esto es genial, gracias. – Bialecki

+0

@miku ¿hay una clase en HttpComponents que haga lo que hace tu código? – ArtB

1

Hay this en línea, por lo que simplemente puede llamar a cualquiera de:

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). 

Se proporciona el código fuente también.

Cuestiones relacionadas