URI獲取請求參數


一、業務場景

獲取類似http://120.0.0.1:8080/receiveState?timeStamp=1586937885&number=2這樣的請求uri中的某些參數

二、解決方法

處理思想:

根據uri字符串的規律,三次切割。第一次獲取路徑和多個參數連接字符串,繼續切割參數字符串,獲取單個參數鍵值對,最后切割鍵值對拿取參數值

 

import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public class UriSplitTest { public static Map<String, List<String>> getQueryParams(String url) { try { Map<String, List<String>> params = new HashMap<String, List<String>>(); String[] urlParts = url.split("\\?");//這里分割uri成請求路徑和請求參數兩部分,注意這里的?不能直接作為分隔符,需要轉義
            if (urlParts.length > 1) { String query = urlParts[1];//獲取到參數字符串
                for (String param : query.split("&")) { String[] pair = param.split("="); String key = URLDecoder.decode(pair[0], "UTF-8"); String value = ""; if (pair.length > 1) { value = URLDecoder.decode(pair[1], "UTF-8"); } List<String> values = params.get(key); if (values == null) { values = new ArrayList<String>(); params.put(key, values); } values.add(value); } } return params; } catch (UnsupportedEncodingException ex) { throw new AssertionError(ex); } } public static void main(String[] args) { String uri = "http://120.0.0.1:8080/receiveState?timeStamp=1586937885&number=2"; Map<String, List<String>> params = getQueryParams(uri); System.out.println(params.toString());//{timeStamp=[1586937885], number=[2]} } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM