You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现JSON RPC系统调用时NumberFormatException报错排查

问题根因

报错本质是JSON反序列化阶段的类型不匹配:Info实体类中将version字段定义为long数值类型,但上游RPC接口返回的version是带字母、标点的字符串(v2.6.5.2: Beta 2.6.5.2),JSON序列化框架无法将该字符串自动转为long类型,因此抛出NumberFormatException,进而触发上层的BitcoindConnector4JException。

修复方案

核心修改点是将version字段的类型调整为和上游返回一致的字符串型,具体操作如下:

  1. 修改Info.java中version字段的类型定义、对应的getter和setter方法:
// 替换原有version相关的代码
private String version;

public String getVersion() {
    return version;
}

public void setVersion(String version) {
    this.version = version;
}
  1. 验证业务逻辑:你当前在SperoCoin.java中直接将info.getVersion()的结果拼接进HTML页面,字段改为String类型后不需要额外修改拼接逻辑,即可正常展示完整的版本字符串。
  2. 可选扩展:如果后续业务需要用版本号做大小比较,可以新增工具方法提取纯数值版本:
// 新增到Info类中
public long getNumericVersion() {
    if (version == null || version.isBlank()) {
        return 0L;
    }
    try {
        // 提取冒号前的版本段,去掉前缀v
        String numPart = version.split(":")[0].replace("v", "").trim();
        String[] segments = numPart.split("\\.");
        long numericVer = 0;
        for (String seg : segments) {
            numericVer = numericVer * 1000 + Integer.parseInt(seg);
        }
        return numericVer;
    } catch (Exception e) {
        e.printStackTrace();
        return 0L;
    }
}
  1. 额外注意:对照上游返回的JSON结构,difficulty字段是对象类型,但你当前在Info类中定义为Double,后续调用getDifficulty()时也会触发类型错误,建议同步修改difficulty为对应的自定义实体类,或者改为Object/JsonNode类型适配。

内容的提问来源于stack exchange,提问作者Spero Coin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:51:01