如题:
生成的地址如下
地址:GET http://192.168.0.114:8090/person/find?pass=123456&psId=-1&length=-1&index=0&startTime=2019-11-17+10%3A05%3A00&endTime=2019-11-19+10%3A05%3A00&model=-1&Order=0
原本startTime和endTime的格式为:2019-11-19 10:05:00
大佬们有什么解决方案吗?
设置空格为%20也没用,因为传递参数是String类型
传时间戳呗
因为是做接口对接,对方接受参数的格式就是:2019-11-19 10:05:00
chrome地址栏输入
http://192.168.0.114:8090/person/find?pass=123456&psId=-1&length=-1&index=0&startTime=2019-11-17 10:05:00&endTime=2019-11-19 10:05:00&model=-1&Order=0
自动url编码为
确实是,但是会报错,显示参数不正确
{"msg":"参数异常","result":1,"success":false}
我程序跑的也是这样
用PostMan生成的地址却不会
@Avenger-:
试试
看到你编码后的格式空格被编码为 +
了,罪魁祸首是 HttpUtility.UrlEncode
,它会将空格编码为 +
更具体的原因希望你能贴点代码,排错会更方便。
URIBuilder uriBuilder = new URIBuilder("http://192.168.0.114:8090/person/find");
List<NameValuePair> list = new LinkedList<>();
BasicNameValuePair param1 = new BasicNameValuePair("pass","123456");
BasicNameValuePair param5 = new BasicNameValuePair("startTime","2019-11-19 10:05:00");
BasicNameValuePair param6 = new BasicNameValuePair("endTime","2019-11-19 10:05:00“);
......
......
list.add(param8);
uriBuilder.setParameters(list);
HttpGet httpGet = new HttpGet(uriBuilder.build());
/
添加请求头信息
*/
// 浏览器表示
httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)");
// 传输的类型
httpGet.addHeader("Content-Type", "application/x-www-form-urlencoded");
// 执行请求
response = httpClient.execute(httpGet);
System.out.println("地址:"+httpGet);
// 获得响应的实体对象
HttpEntity entity = response.getEntity();
// 使用Apache提供的工具类进行转换成字符串
entityStr = EntityUtils.toString(entity, "UTF-8");
@Avenger-:
这样试试
httpGet.addHeader("Content-Type", "text/plain");
@小小高: 还是不行,被转义成+号了
@Avenger-:
你把这个输出看看 uriBuilder.build() ?
@小小高:
uriBuilder.build()= http://192.168.0.114:8090/person/find?pass=123456&psId=-1&length=-1&index=0&startTime=2019-11-17+10%3A05%3A00&endTime=2019-11-19+10%3A05%3A00&model=-1&Order=0
@Avenger-:
这可能是个临时解决方案
HttpGet httpGet = new HttpGet(uriBuilder.build().replace(/\+/g,'%2B'));
@Mops: 大概的意思是替换地址中的特殊符号吗?我尝试过这种方法,也没有效果
@Avenger-: build 后再替换。