第三方API时间字段解析的空指针异常
应用场景
现在我要调取第三方API获得相应的数据
现在接口可以正常调通并获取到json
(起初是对照接口文档写的代码,但是一直报错500,然后改了好多代码,很害怕是因为自己的代码没写好才这样的,最后还是去问同事了,同事说可能是参数缺失,又帮我要了postman链接,对比之后发现不一样的参数居多!!!!!甚至连url都不一样啊啊啊啊啊啊。可恶,为什么开发的时候还要面对这种问题,可恶的“假材料”!!!!)
以下是将获取到的JSON数据转换为TollExitRecordVO
类的相关代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28// 解析成功的响应数据
JSONArray msgContent = jsonObject.getJSONArray("msgContent");
if (msgContent != null && !msgContent.isEmpty()) {
// 遍历msgContent数组,解析每一条数据
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
for (int i = 0; i < msgContent.size(); i++) {
JSONObject vehicleData = msgContent.getJSONObject(i);
TollExitRecordVO record = new TollExitRecordVO();
// 解析每一条记录并填充到TollExitRecordVO对象
record.setPassTime(LocalDateTime.parse(vehicleData.getStr("passtime"), formatter));
record.setEnTime(LocalDateTime.parse(vehicleData.getStr("entime"), formatter));
record.setVehicleType(vehicleData.getInt("vehicletype"));
record.setGantryName(vehicleData.getStr("gantryname"));
record.setVehicleClass(vehicleData.getInt("vehicleclass"));
record.setGantryType(vehicleData.getInt("gantrytype"));
record.setVehiclePlate(vehicleData.getStr("vlp"));
record.setVehiclePlateColor(vehicleData.getInt("vlpc"));
record.setEnTollStationIdName(vehicleData.getStr("entollstationname"));
records.add(record); // 将每一条记录加入到列表中
}
} else {
log.warn("没有查询到车辆信息");
}
return R.ok(records); // 返回所有解析后的记录
问题描述
运行上述代码后,程序抛出了NullPointerException:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34{
"msgType":"ARR",
"msgContent":[
{
"vehicletype":"1",
"vehicleclass":"0",
"entollstationname1":"修水站",
"passtime":"2025-02-01T08:21:43",
"entime":"2025-02-01T08:21:43",
"vlp":"京A88888",
"vlpc":"0",
"entollstationname":"修水站"
},
{
"vehicletype":"1",
"vehicleclass":"0",
"entollstationname1":"兴国东站",
"passtime":"2025-02-01T12:47:46",
"entime":"2025-02-01T12:47:46",
"vlp":"京A88888",
"vlpc":"0",
"entollstationname":"兴国东站"
}
],
"msgDes":"QUERY",
"msgState":"SUCCESS"
}
Exception in thread "main" java.lang.NullPointerException: text
at java.util.Objects.requireNonNull(Objects.java:228)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1848)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at com.dhc.traffic.approve.utils.ThirdApiUtils.getTollEntryRecord(ThirdApiUtils.java:245)
at com.dhc.traffic.approve.utils.ThirdApiUtils.main(ThirdApiUtils.java:171)
从堆栈信息可以看出,NullPointerException 发生在以下代码行:1
record.setPassTime(LocalDateTime.parse(vehicleData.getStr("passTime"), formatter));
报错信息提示 NullPointerException,说明 vehicleData.getStr(“passTime”) 返回了 null,然后在 LocalDateTime.parse() 中调用时发生了空指针异常
为什么从json里来看,passtime和entime都是有值的,但是获取到的结果为null呢?
解决方案
修改代码如下:
1 | // 解析成功的响应数据 |
1 | { |