Python调用Java接口失败(Java日志打印警告:JSON parse error:xxxx)的解决方案
作者:岫珩
文章描述了Python调用Java接口时遇到400错误和JSON解析错误的问题,通过分析问题发现参数传递方式可能存在问题,修改Python代码使用data参数并序列化数据后,问题解决,文章总结了在Python调用Java接口传递JSONObject数据时的注意事项,需要的朋友可以参考下
1. 场景描述
现有以下Java接口实现:
@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转换为TbInfoEntity对象
TbInfoEntity tie = JSONObject.parseObject(requestBody.toJSONString(), TbInfoEntity.class);
// 调用Mapper接口写入数据库
tieMapper.insert(tie);
return tie;
}
接口访问地址为:
http://127.0.0.1:8089/test/addInfo
对应的Python调用代码如下:
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"
# 调用接口
response = requests.post(url=url, json=data, headers=headers, timeout=30)
执行后出现400错误,Java服务日志显示JSON解析错误。
2. 问题分析
根据错误现象:
- Python端报400错误,提示请求参数问题
- Java服务日志显示JSON解析失败
- 主要关注请求参数中的data部分可能存在格式问题
初步判断问题出在请求参数的传递方式上,尝试修改参数传递方式。
3. 解决方案
修改Python调用代码为以下形式:
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参数并手动序列化JSON
response = requests.post(url=url, data=json.dumps(data), headers=headers, timeout=30)
修改后调用成功,数据正常写入数据库。
4. 经验总结
Python调用Java接口传递JSONObject类型数据时:
- 建议使用data参数而非json参数
- 必须使用json.dumps()对数据进行序列化处理
- 这样才能确保参数格式符合Java端JSON解析的要求
以上就是Python调用Java接口失败(Java日志打印警告:JSON parse error:xxxx)的解决方案的详细内容,更多关于Python调用Java接口失败的资料请关注脚本之家其它相关文章!
