发请求调用第三方接口的工具类附上:
链接: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 工具类发请求时却无法进行转义,
就算手动把空格改成%进行传参, 在逻辑代码层面也会出现异常
所以只能通过转义字符来处理