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

如何在Jackson的ObjectMapper中获取数组值而非数组引用?

解决Jackson映射ColumnHeader数组显示引用而非实际值的问题

常见原因及对应解决方法

1. 重写ColumnHeader类的toString()方法

Java对象默认的toString()会返回内存地址引用,你需要在ColumnHeader类里手动重写该方法,输出对象的实际字段值:

public class ColumnHeader {
    private String headerName;
    private String dataType;

    // 省略getter、setter方法

    @Override
    public String toString() {
        return "ColumnHeader{headerName='" + headerName + "', dataType='" + dataType + "'}";
    }
}

2. 修正数组的日志输出方式

如果是直接打印数组对象,Java会默认输出数组的内存引用。你需要换两种方式输出:

  • 遍历数组逐个打印元素:
ColumnHeader[] headers = response.getColumnHeaders();
for (ColumnHeader header : headers) {
    System.out.println(header);
}
  • 使用Arrays.toString()工具方法:
import java.util.Arrays;

// ...
System.out.println(Arrays.toString(response.getColumnHeaders()));

3. 检查Jackson序列化配置

确认ObjectMapper没有禁用数组相关的序列化特性,默认配置无需额外调整,若有自定义配置,排查是否存在如下错误设置:

// 这类配置会干扰正常的数组序列化,需移除
objectMapper.disable(SerializationFeature.WRITE_ARRAY_LIST_AS_JSON_ARRAY);

4. 验证实体类字段注解

确保Response类中的columnHeaders字段没有被错误注解阻止序列化:

public class Response {
    // 避免使用@JsonIgnore、@JsonIgnoreProperties等注解屏蔽该字段
    private ColumnHeader[] columnHeaders;

    // 省略getter、setter方法
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:40:12