GET请求参数带有特殊符号被转码!

情况是这样的,我要去请求第三方项目的接口获取资源csv文件,

接口地址为: http://127.0.0.1:8080/getDate/?username=admin/password=123456 /startTime=2018-11-4_16:00:00/endTime=2018-11-5_16:30:00/res=min/filter={me=127.0.0.1-0}/DT=csv

通过浏览器直接输入该地址可以正常获取csv文件,
但是我通过java RestTemplate 请求改地址时,/password 后面的参数的特殊符号就被转码了,然后就请求不到了,

变成这样:
 [org.springframework.web.client.RestTemplate] - GET request for "http://127.0.0.1:8080/getDate/?username=admin/password%3D123456/startTime%3D2018-11-05_14:52:08/endTime%3D2018-11-05_14:55:08/res%3Dmin/filter%3D%7Bme%3D127.0.0.1-0%7D/DT%3Dcsv" resulted in 200 (200)


源码:
    @RequestMapping(value = "query3.html")
    @ResponseBody
    public static String query3() {
        RestTemplate restTemplate = new RestTemplate();
        String result  = "";

        Date date = new Date();
        long time = 30*60*100;  //30min
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
        String startTime = df.format(new Date(date.getTime() - time));
        String endTime = df.format(new Date(date.getTime()));
        String username = "admin";
        String password = "123456";
        String res= "min";
        String filter = "{me=127.0.0.1-0}";
        String DT = "csv";

        Map<String,String> queryMap = new HashMap<>();
        queryMap.put("username",username);
        queryMap.put("password",password);
        queryMap.put("startTime",startTime);
        queryMap.put("endTime",endTime);
        queryMap.put("res",res);
        queryMap.put("filter",filter);
        queryMap.put("DT",DT);

        String dataUrl = "http://127.0.0.1:8080/getDate/";
        String queryMapUrl = "?username={username}/password={password}/startTime={startTime}/endTime={endTime}/res={res}/filter={filter}/DT={DT}";

        try {
            result = restTemplate.getForObject(dataUrl+queryMapUrl,String.class,queryMap);
        }catch (Exception e){
            e.printStackTrace();
        }
        return  result;
    }


这要如何解决
谢谢!

URLDecoder.decode()解码

还有没有别的方法,这个是第三方项目的,改不了他们那边的代码

获取文件不建议用get请求,用post;
你这个方法确定要返回字符串吗
result = restTemplate.getForObject()

非要用get的话,在拼接地址时,可以用一个方法进行转义下,
什么API记不清了,好像是什么 encodeUrl什么的

可以参考下这个,在拼接字符串的时候将"="换成 %3D
https://www.cnblogs.com/aizj/p/8052551.html

你想表达意思的我知道,但是由于这是第三方lrc项目,他们那边的代码我改不了,而且不只我一个在接入,
所以
1.改post是行不通的
2.设置编码也是行不通的,我这边设置编码,也意味他们那边要统一
3.将特殊符号改成非特殊符号也是行不通的,我改了,他们那边不用改?
4.csv文件本身就是纯文本文件,是可以用字符串接收的,再说了,我这是测试代码,后面我会改成用io流的方式处理
5.既然浏览器直接输入url可以正常访问,那肯定接口这边也有某种方式可以实现

将传的值用encodeURIComponent()包住试试

万分感谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值