如何在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
相关产品推荐
相关产品推荐

