Skip to content

[WIP] Fix GsonParser parse error during transfer#3760

Merged
binarywang merged 3 commits into
developfrom
copilot/fix-gson-parser-error
Nov 17, 2025
Merged

[WIP] Fix GsonParser parse error during transfer#3760
binarywang merged 3 commits into
developfrom
copilot/fix-gson-parser-error

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Nov 17, 2025

修复 GsonParser 与低版本 Gson 的兼容性问题

问题描述

用户在使用商家转账接口时,遇到 NoSuchMethodError: JsonParser.parseString() 错误。这是因为 JsonParser.parseString() 方法在 Gson 2.8.6 之前的版本中不存在。虽然项目定义了 Gson 2.13.1,但用户运行时可能因为依赖冲突而使用了更低版本的 Gson。

修复计划

  • 分析问题根因:确认 JsonParser.parseString() 是 Gson 2.8.6+ 的方法
  • 修改 GsonParser 类,使用兼容低版本 Gson 的 API
  • 添加单元测试验证修复
  • 验证修改不会破坏现有功能 - 构建成功
  • 运行 checkstyle 和构建验证 - 全部通过
  • 运行安全扫描 - 未发现问题

技术细节

问题原因:

  • JsonParser.parseString()JsonParser.parseReader() 是 Gson 2.8.6 新增的静态方法
  • 在 Gson 2.8.6 之前的版本中,这些方法不存在,会导致 NoSuchMethodError

修改内容:

  • JsonParser.parseString(json) 改为 new JsonParser().parse(json)
  • JsonParser.parseReader(json) 改为 new JsonParser().parse(json)
  • 添加 GsonParserTest 单元测试,覆盖三个 parse 方法

兼容性说明:

  • new JsonParser().parse() 方法在 Gson 2.1+ 版本中都可用,兼容性更好
  • 这样可以同时支持 Gson 2.8.6 之前和之后的版本
  • 虽然 new JsonParser() 在 Gson 2.8.6+ 中被标记为 deprecated,但为了向后兼容性,这是必要的权衡

验证结果:

  • ✅ Maven 构建成功(所有 34 个模块)
  • ✅ Checkstyle 代码风格检查通过
  • ✅ 添加了单元测试以验证修复

安全总结

未发现安全漏洞。此次修改仅是将 Gson API 调用改为更兼容的版本,不涉及任何安全相关的逻辑变更。

Original prompt

This section details on the original issue you should resolve

<issue_title>GsonParser parse error</issue_title>
<issue_description>

简要描述

在调用商家转账时报错抛不出来 把微信的错误进行转换时报错

模块版本情况

  • WxJava 模块名: weixin-java-pay
  • WxJava 版本号: 测试了两个版本: 4.7.8.B 和 4.7.8-20251102.163029

具体信息:
调用的接口是:getTransferService().transferBills(transferBillsRequest);

返回的异常信息是: {"code":"ALREADY_EXISTS","message":"当前订单已关闭,可查询订单了解关闭原因"}

在调用JsonObject jsonObject = GsonParser.parse(responseString);转换时会报以下错误:
java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement;
at me.chanjar.weixin.common.util.json.GsonParser.parse(GsonParser.java:15)
at com.github.binarywang.wxpay.service.impl.WxPayServiceApacheHttpImpl.postV3WithWechatpaySerial(WxPayServiceApacheHttpImpl.java:184)
at com.github.binarywang.wxpay.service.impl.TransferServiceImpl.transferBills(TransferServiceImpl.java:94)
</issue_description>

Comments on the Issue (you are @copilot in this section)

Custom agent used: 自定义的
需要用中文


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 2 commits November 17, 2025 03:07
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
@binarywang binarywang marked this pull request as ready for review November 17, 2025 03:11
@binarywang binarywang merged commit 3c440ea into develop Nov 17, 2025
1 check passed
Copilot AI requested a review from binarywang November 17, 2025 03:12
@binarywang binarywang deleted the copilot/fix-gson-parser-error branch November 17, 2025 03:17
@binarywang binarywang added this to the 4.7.9 milestone Nov 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GsonParser parse error

2 participants