2009-12-07 40 views
19

Điều tôi đang tìm kiếm cụ thể là một số mã trong Java sẽ lấy đối tượng Map và chuyển đổi nó thành chuỗi truy vấn mà tôi có thể thêm vào URL mà tôi quay trở lại. Tôi chắc rằng có một thư viện thực hiện điều này và nhiều hơn nữa, nhưng tôi không thể tìm thấy nó với một tìm kiếm nhanh chóng trên Google. Bất cứ ai biết một trong đó sẽ làm điều này?Có gói Java để xử lý URL xây dựng không?

+1

Tôi có cùng một câu hỏi: http://stackoverflow.com/questions/1405731/is-there-a-java-method-that-encodes-a-collection-of-parameters-as-a-url-query -com. Không có câu trả lời tốt mặc dù. : -/ –

+0

Xem thêm http://www.leveluplunch.com/java/examples/construct-build-uri/ và https://www.quora.com/Is-there-an-open-source-URL-manipulation -library-in-Java. – Vadzim

+0

Bản sao có thể có của [Cách thành ngữ để soạn URL hoặc URI bằng Java là gì?] (Http://stackoverflow.com/questions/883136/what-is-the-idiomatic-way-to-compose-a-url -or-uri-in-java) –

Trả lời

11

Tôi đã tìm thấy apache httpcomponents là một thư viện vững chắc và linh hoạt để xử lý HTTP trong Java. Tuy nhiên, đây là một lớp học mẫu, mà có thể đủ cho các chuỗi truy vấn xây dựng 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; } 
} 

Cách sử dụng:

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

Có vẻ ổn! Tuy nhiên, tôi khuyên bạn nên sử dụng Generics trong mã của bạn! – notnoop

+0

Tôi sẽ chấp nhận điều này, nhưng yah phương pháp URLEncoder.encode(String s) không còn được dùng để ủng hộ một đối số có định dạng nữa. Ngoài ra, điều này là tuyệt vời, cảm ơn. – Bialecki

+0

@miku là có một lớp trong HttpComponents mà làm những gì mã của bạn không? – ArtB

1

this trực tuyến, vì vậy bạn chỉ có thể gọi bất kỳ:

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

Ông cung cấp mã nguồn quá.

Các vấn đề liên quan