首页 新闻 会员 周边 捐助

HttpClient 用Get方式传递日期格式参数的时候 如何让特殊符号不转义?

0
悬赏园豆:5 [待解决问题]

如题:
生成的地址如下
地址: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类型

Avenger-的主页 Avenger- | 初学一级 | 园豆:196
提问于:2019-11-21 09:33
< >
分享
所有回答(3)
0

传时间戳呗

yytxdy | 园豆:1680 (小虾三级) | 2019-11-21 09:47

因为是做接口对接,对方接受参数的格式就是:2019-11-19 10:05:00

支持(0) 反对(0) Avenger- | 园豆:196 (初学一级) | 2019-11-21 09:52
0

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编码为

http://192.168.0.114:8090/person/find?pass=123456&psId=-1&length=-1&index=0&startTime=2019-11-17%2010:05:00&endTime=2019-11-19%2010:05:00&model=-1&Order=0

小小高 | 园豆:1307 (小虾三级) | 2019-11-21 10:06

确实是,但是会报错,显示参数不正确
{"msg":"参数异常","result":1,"success":false}
我程序跑的也是这样

用PostMan生成的地址却不会

支持(0) 反对(0) Avenger- | 园豆:196 (初学一级) | 2019-11-21 10:09

@Avenger-: 

试试

支持(0) 反对(0) 小小高 | 园豆:1307 (小虾三级) | 2019-11-21 10:13
0

看到你编码后的格式空格被编码为 + 了,罪魁祸首是 HttpUtility.UrlEncode,它会将空格编码为 +
更具体的原因希望你能贴点代码,排错会更方便。

Mops | 园豆:23 (初学一级) | 2019-11-21 10:11

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");

支持(0) 反对(0) Avenger- | 园豆:196 (初学一级) | 2019-11-21 10:24

@Avenger-: 

这样试试

httpGet.addHeader("Content-Type", "text/plain");

支持(0) 反对(0) 小小高 | 园豆:1307 (小虾三级) | 2019-11-21 10:28

@小小高: 还是不行,被转义成+号了

支持(0) 反对(0) Avenger- | 园豆:196 (初学一级) | 2019-11-21 10:30

@Avenger-: 

你把这个输出看看 uriBuilder.build() ?

支持(0) 反对(0) 小小高 | 园豆:1307 (小虾三级) | 2019-11-21 10:33

@小小高:
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

支持(0) 反对(0) Avenger- | 园豆:196 (初学一级) | 2019-11-21 10:35

@Avenger-:
这可能是个临时解决方案

HttpGet httpGet = new HttpGet(uriBuilder.build().replace(/\+/g,'%2B'));
支持(0) 反对(0) Mops | 园豆:23 (初学一级) | 2019-11-21 10:40

@Mops: 大概的意思是替换地址中的特殊符号吗?我尝试过这种方法,也没有效果

支持(0) 反对(0) Avenger- | 园豆:196 (初学一级) | 2019-11-21 10:53

@Avenger-: build 后再替换。

支持(0) 反对(0) Mops | 园豆:23 (初学一级) | 2019-11-21 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册