1. 復(fù)現(xiàn)錯(cuò)誤
今天寫好hive表導(dǎo)入的回調(diào)
的接口,如下代碼所示:
/**
* hive表導(dǎo)入的回調(diào)接口
*
* @author super先生
* @datetime 2023/3/20:16:32
* @return
*/
@ResponseBody
@PostMapping(value = "/xxx/importTables/callback")
public ServiceStatusData callbackLocalHiveImportTables(
@RequestParam("missionId") String missionId) {
logger.info("mock數(shù)據(jù)的入?yún)⒂涗洠簃issionId={}", missionId);
if (isBlank(missionId)) {
return new ServiceStatusData(ServiceStatusData.Status.Fail, "入?yún)㈠e(cuò)誤:缺少任務(wù)id", null);
}
return hiveImportTaskService.callbackLocalHiveImportTables(missionId);
}
啟動(dòng)postman
訪問該接口,確報(bào)出如下錯(cuò)誤:
即Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
2. 分析錯(cuò)誤
根據(jù)java.lang.ClassCastException
可知,這是java
類型轉(zhuǎn)換的異常錯(cuò)誤。
其次,再將錯(cuò)誤信息java.lang.String cannot be cast to java.lang.Long
,翻譯成中文無法將String類型轉(zhuǎn)化成Long類型
。
為什么會(huì)報(bào)出這個(gè)錯(cuò)誤呢?首先經(jīng)過打斷點(diǎn)的方式,來定位錯(cuò)誤之處,如下代碼所示:
由斷點(diǎn)可以初步判斷,問題可能出現(xiàn)在hiveImportTaskMapper.updateCallbackTimeByMissionId(missionId);
方法中,繼續(xù)斷點(diǎn)往下走:
由此可以確定,問題出現(xiàn)在hiveImportTaskMapper.updateCallbackTimeByMissionId(missionId);
方法中。
于是,進(jìn)入到hiveImportTaskMapper.updateCallbackTimeByMissionId(missionId)
方法,如下代碼所示:
@Mapper
@Repository
public interface HiveImportTaskMapper {
/**
* 更新回調(diào)時(shí)間
*
* @author super先生
* @datetime 2023/3/24:11:45
* @param missionId 抽取邏輯id
* @return
*/
Long updateCallbackTimeByMissionId(String missionId);
}
接著進(jìn)入到hiveImportTaskMapper.xml
文件中,找到id = updateCallbackTimeByMissionId
的update
標(biāo)簽,如下代碼所示:
<update id="updateCallbackTimeByMissionId" parameterType="java.lang.Long">
UPDATE
hive_import_task
SET
call_back_time = NOW() ,
update_time = NOW()
where
deleted = 0 and mission_id = #{missionId}
</update>
可以清晰地看到:
-
HiveImportTaskMapper
類中的updateCallbackTimeByMissionId(missionId);
方法的形參是String
類型 -
hiveImportTaskMapper.xml
文件中的parameterType
是Long
類型。
因而,類型不一致才導(dǎo)致了ClassCastException
的異常錯(cuò)誤:
3. 解決錯(cuò)誤
既然是 HiveImportTaskMapper
類中的updateCallbackTimeByMissionId(missionId);
方法的形參類型和hiveImportTaskMapper.xml
文件中的parameterType
類型不一致,導(dǎo)致了這個(gè)錯(cuò)誤,可進(jìn)行如下修改。
將hiveImportTaskMapper.xml
文件中的parameterType
類型,修改為java.lang.String
即可,如下代碼所示:
<update id="updateCallbackTimeByMissionId" parameterType="java.lang.String">
UPDATE
hive_import_task
SET
call_back_time = NOW() ,
update_time = NOW()
where
deleted = 0 and mission_id = #{missionId}
</update>
重新啟動(dòng)項(xiàng)目,再次使用postman
測(cè)試,方可成功運(yùn)行,如下圖所示:文章來源:http://www.zghlxwxcb.cn/news/detail-533660.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-533660.html
到了這里,關(guān)于Cause: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long錯(cuò)誤的詳細(xì)解決方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!