Python调用Java接口失败(Java日志打印警告:JSONparseerror:xxxx)的解决方案

Written by

in

文章目录
  • 现有以下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解析错误。
  • 根据错误现象: Python端报400错误,提示请求参数问题 Java服务日志显示JSON解析失败 主要关注请求参数中的data部分可能存在格式问题 初步判断问题出在请求参数的传递方式上,尝试修改参数传递方式。
  • 修改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) 修改后调用成功,数据正常写入数据库。
  • Python调用Java接口传递JSONObject类型数据时: 建议使用data参数而非json参数 必须使用json.dumps()对数据进行序列化处理 这样才能确保参数格式符合Java端JSON解析的要求 以上就是Python调用Java接口失败(Java日志打印警告:JSON parse error:xxxx)的解决方案的详细内容,更多关于Python调用Java接口失败的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python调用Java接口实现互相SM2加签验签 Python调用Java数据接口实现CRUD操作的详细指南 Python通过Jpype实现调用Java代码 python如何调用java的jar包
  • 目录
    • 1. 场景描述
    • 2. 问题分析
    • 3. 解决方案
    • 4. 经验总结

    现有以下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解析错误。

    根据错误现象:

    • Python端报400错误,提示请求参数问题
    • Java服务日志显示JSON解析失败
    • 主要关注请求参数中的data部分可能存在格式问题

    初步判断问题出在请求参数的传递方式上,尝试修改参数传递方式。

    修改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)
    

    修改后调用成功,数据正常写入数据库。

    Python调用Java接口传递JSONObject类型数据时:

    • 建议使用data参数而非json参数
    • 必须使用json.dumps()对数据进行序列化处理
    • 这样才能确保参数格式符合Java端JSON解析的要求

    以上就是Python调用Java接口失败(Java日志打印警告:JSON parse error:xxxx)的解决方案的详细内容,更多关于Python调用Java接口失败的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • Python调用Java接口实现互相SM2加签验签
    • Python调用Java数据接口实现CRUD操作的详细指南
    • Python通过Jpype实现调用Java代码
    • python如何调用java的jar包

    站内搜索