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

Spring Boot Camel查询PostgreSQL出现Long转String类型转换异常如何解决

根因分析
  • 你执行JDBC查询后将结果强转为ArrayList<HashMap<String,String>>,由于Java泛型是编译期擦除的,这个强转在运行时不会直接报错,但实际查询返回的Map中,id对应的值是Long类型(匹配PostgreSQL的bigint类型),和你声明的String值类型不匹配。
  • 即使你修改了EmployeeInfo的empId为long类型,只要你还是先从HashMap<String,String>中按String类型取值,再转long,依然会触发Long转String的类转换异常,问题根源是Map的泛型声明和实际数据类型不符。
可行解决方案

方案1:修正泛型声明,手动做类型转换

直接用无值类型限制的Map接收查询结果,取值时根据字段类型做适配:

  1. 将强转逻辑修改为ArrayList<HashMap<String, Object>>,示例代码:
// 原错误强转代码
// ArrayList<HashMap<String,String>> result = (ArrayList<HashMap<String,String>>) exchange.getIn().getBody();
// 修正后代码
ArrayList<HashMap<String,Object>> result = (ArrayList<HashMap<String,Object>>) exchange.getIn().getBody();
  1. 遍历赋值时针对不同字段做类型转换:
for(HashMap<String,Object> item : result) {
    EmployeeInfo info = new EmployeeInfo();
    // id字段转long,用Number接收适配所有数字类型,避免后续字段类型调整报错
    info.setEmpId(((Number) item.get("id")).longValue());
    // 字符串字段直接调用toString即可,兼容非字符串返回值
    info.setName(item.get("name").toString());
    info.setCountry(item.get("country").toString());
}

方案2:借助Camel自动类型转换,省略手动遍历

Camel的JDBC组件支持直接将查询结果映射为POJO集合,无需手动处理Map:

  1. 保证EmployeeInfo的字段名和查询返回的字段名一一对应(empId对应id的话可以加@JsonProperty("id")或者Camel的映射注解)
  2. 在JDBC查询步骤之后添加convertBodyTo配置,示例路由配置:
from("your:endpoint")
    .to("jdbc:dataSource?useHeadersAsParameters=true")
    .convertBodyTo(List.class, EmployeeInfo.class) // 直接转成EmployeeInfo集合
    // 后续直接操作List<EmployeeInfo>即可
    .process(exchange -> {
        List<EmployeeInfo> result = exchange.getIn().getBody(List.class);
        // 直接使用result
    });

方案3:查询层直接转换字段类型

如果确实需要所有返回值都是String类型,可以在SQL查询时就把数字字段转成字符串,适配你原来的HashMap<String,String>声明:

-- PostgreSQL中将bigint类型的id转成text类型返回
SELECT id::text, name, country FROM 你的表名 WHERE 条件
注意事项
  • 不要依赖泛型强转做类型校验,Java泛型擦除会导致类型问题延迟到运行时才触发,建议优先用Camel自带的类型转换能力处理查询结果映射。
  • 手动处理数字类型转换时优先用Number类接收值,可兼容int、bigint等所有数字类型的返回结果,避免后续数据库字段类型调整引发新的类型转换异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:39:02