Python調(diào)用Java接口失敗(Java日志打印警告:JSON parse error:xxxx)的解決方案
1. 場景描述
現(xiàn)有以下Java接口實(shí)現(xiàn):
@RequestMapping(value="addInfo", method=RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
public TbInfoEntity addInfo(@RequestHeader("userGroup")String userGroup,
@RequestHeader("username")String username,
@RequestBody JSONObject requestBody
){
// 將JSONObject轉(zhuǎn)換為TbInfoEntity對象
TbInfoEntity tie = JSONObject.parseObject(requestBody.toJSONString(), TbInfoEntity.class);
// 調(diào)用Mapper接口寫入數(shù)據(jù)庫
tieMapper.insert(tie);
return tie;
}
接口訪問地址為:
http://127.0.0.1:8089/test/addInfo
對應(yīng)的Python調(diào)用代碼如下:
import requests
import json
# 構(gòu)建請求數(shù)據(jù)
data = {
"userId":"001",
"userAge":"19",
"userAddr":"shanghai"
}
# 設(shè)置請求頭
headers = {
"Content-Type":"application/json",
"Accept":"application/json",
"username":"xiuheng",
"userGroup":"csdn"
}
url = "http://127.0.0.1:8089/test/addInfo"
# 調(diào)用接口
response = requests.post(url=url, json=data, headers=headers, timeout=30)
執(zhí)行后出現(xiàn)400錯誤,Java服務(wù)日志顯示JSON解析錯誤。
2. 問題分析
根據(jù)錯誤現(xiàn)象:
- Python端報(bào)400錯誤,提示請求參數(shù)問題
- Java服務(wù)日志顯示JSON解析失敗
- 主要關(guān)注請求參數(shù)中的data部分可能存在格式問題
初步判斷問題出在請求參數(shù)的傳遞方式上,嘗試修改參數(shù)傳遞方式。
3. 解決方案
修改Python調(diào)用代碼為以下形式:
import requests
import json
data = {
"userId":"001",
"userAge":"19",
"userAddr":"shanghai"
}
headers = {
"Content-Type":"application/json",
"Accept":"application/json",
"username":"xiuheng",
"userGroup":"csdn"
}
url = "http://127.0.0.1:8089/test/addInfo"
# 使用data參數(shù)并手動序列化JSON
response = requests.post(url=url, data=json.dumps(data), headers=headers, timeout=30)
修改后調(diào)用成功,數(shù)據(jù)正常寫入數(shù)據(jù)庫。
4. 經(jīng)驗(yàn)總結(jié)
Python調(diào)用Java接口傳遞JSONObject類型數(shù)據(jù)時:
- 建議使用data參數(shù)而非json參數(shù)
- 必須使用json.dumps()對數(shù)據(jù)進(jìn)行序列化處理
- 這樣才能確保參數(shù)格式符合Java端JSON解析的要求
以上就是Python調(diào)用Java接口失敗(Java日志打印警告:JSON parse error:xxxx)的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Python調(diào)用Java接口失敗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
學(xué)習(xí)python之編寫簡單乘法口訣表實(shí)現(xiàn)代碼
這篇文章主要介紹了學(xué)習(xí)python之編寫簡單乘法口訣表實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-02-02
Python通過select實(shí)現(xiàn)異步IO的方法
這篇文章主要介紹了Python通過select實(shí)現(xiàn)異步IO的方法,實(shí)例分析了Python中select模塊的使用技巧,需要的朋友可以參考下2015-06-06
使用Python字符串訪問與修改局部變量的實(shí)現(xiàn)代碼
這篇文章主要介紹了使用Python字符串訪問與修改局部變量,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
python3+PyQt5實(shí)現(xiàn)自定義窗口部件Counters
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)自定義窗口部件,Counters自定窗口部件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
Python把圖片轉(zhuǎn)化為pdf代碼實(shí)例
這篇文章主要介紹了Python把圖片轉(zhuǎn)化為pdf代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07

