调用第三方接口时产生的异常

发请求调用第三方接口的工具类附上:

链接:https://pan.baidu.com/s/12t-9mAQBxN195DQeQ13dMA 
提取码:2b6z

详细描述如下:

Json

数据转换时出现异常

调用第三方接口后获取到的数据为字符串, 将字符串解析成 json 格式时会出现两种情况:
	一、将字符串解析成 json 对象
		我们会从对象中获取每一个属性的值, 这个值返回成字符串
		但是输出时会带有双引号, 正常输出字符串是没有双引号的
		有两种解决办法:
			-- 直接调用 toString() 方法, 依照 API 文档, 此方法返回字符串本身
			-- 直接调用 replace("\"","") 方法, 依照 API 文档, 此方法用来对指定的值进行替换,
				因为不能使用单引号, 只能通过转义字符 \ 来进行声明, 以字符串的形式进行传参
				最终就是看到的这样: "\""
	二、将字符串解析成 json 数组
		在对数据进行接收时, 我们通常会直接给数组的泛型指定实体类, 这样封装的就是实体类对象数组, 也就不会出现字符串异常
			但是具体什么原因就不清楚了, 如果各位看官知道原理, 欢迎留言

Http

语法异常

简介: 主要是因为日期形式的字符串, 它的空格不能被转义出来, 可以用 + 或者 %20 代替空格
-- 第一个异常信息: java.lang.IllegalArgumentException: Illegal character in query at index 122:
-- 第二个异常信息: Caused by: java.net.URISyntaxException: Illegal character in query at index 122:
当我点进去看才发现原来是语法异常, 请看调用关系:
httpRequst = new HttpGet(s);
	public HttpGet(String uri) { this.setURI(URI.create(uri));}
		public static URI create(String str) {
        try { return new URI(str);
        } catch (URISyntaxException x) {
            throw new IllegalArgumentException(x.getMessage(), x);}}
总结: 综合来看, 其实就是在创建 URI 对象时产生的异常.
	当时我把拼接的路径放到浏览器访问是没有问题的
	然后再把浏览器的 url 路径和我生成的路径一对比, 这问题就出来了
	因为我的路径带有日期样式的字符串: 2021-01-30 00:00:00
	在浏览器进行访问时空格会被转义成 % ,例如: 2021-01-30%2000:00:00
	但是当我调用 http 工具类发请求时却无法进行转义,
	就算手动把空格改成%进行传参, 在逻辑代码层面也会出现异常
	所以只能通过转义字符来处理
	
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值