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接口失败的资料请关注代码网其它相关文章!
发表评论