远程调用RestTemplate使用避坑指南

一、前言介绍

        RestTemplate是Spring中用于远程接口调用的工具类,它是Apache的HttpClient的模板封装,使用起来非常方便,本文将讲述这两天自己在使用RestTemplate过程中遇到的问题,当然这些问题也是由于自己对RestTemplate工具类了解不够全面不够透彻造成的,希望自己遇到的这些问题能为大家提前避雷或是遇到类似问题时的一个解决参考。

 

二、 问题记录

1. 慎!【url参数中有json字符串】

     在使用RestTemplate进行远程接口调用时,如果url拼接参数中json字符串时一定要小心,使用场景如下:利用restTemplate调用user的查询信息接口,url中的一个参数user为json字符串格式{\"user\":\"xiaoming,\"age\":"12"}

  // JSON参数
        Map<String, String> paramMap = new HashMap<>(8);
        paramMap.put("name","xiaoming");
        paramMap.put("age","12");
        String paramJsonStr = JSONObject.toJSONString(paramMap);

        // 实际参数 url = "http://localhost:8080/api/user?user={\"name\":\"xiaoming\",\"age\":\"12\"}&country=china";
        String url = "http://localhost:8080/api/user?user=" + paramJsonStr + "&country=china";
        RestTemplate restTemplate = new RestTemplate();
        // 调用出错
        Object execute = restTemplate.execute(url, HttpMethod.GET, null, null);

此时当我们运行程序时会抛出以下错误:

错误意思大概是没有足够可用的变量值来填充扩展 'name',这是什么鬼意思,别着急让我们跟跟代码看看异常抛出的位置,最终定位如下,在创建URI过程中调用了 UriComponents.expandUriComponent()方法抛出异常:

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值