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