使用 jackson 序列化对象的核心做法是实例化 objectmapper 并调用其 writevalueasstring() 方法,该方法会将 java 对象转换为标准的 json 字符串。在默认配置下,jackson 会遍历对象的所有非静态、非瞬态字段,将其属性名和值映射为 json 键值对。如果对象包含嵌套对象或集合,jackson 会自动递归处理这些结构,生成完整的层级 json 数据。

如何自定义序列化时的字段名称?
通过 @JsonProperty 注解可以指定序列化后的 JSON 键名,从而改变默认的字段映射行为。当你在类的 getter 方法或字段上添加该注解并传入目标字符串时,Jackson 在序列化过程中会使用注解中的值作为 JSON 的 key,而不是 Java 对象的原始字段名。这种机制允许在不修改 Java 类结构的情况下,灵活适配前端或 API 所需的 JSON 格式。

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public class User {
private String userName;
@JsonProperty("user_name")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
// 使用示例
ObjectMapper mapper = new ObjectMapper();
User user = new User();
user.setUserName("Alice");
String json = mapper.writeValueAsString(user);
// 输出: {"user_name":"Alice"}
如何处理序列化过程中的空值字段?
可以通过 ObjectMapper 的配置选项来控制是否将值为 null 的字段包含在最终的 JSON 字符串中。默认情况下,Jackson 会将所有字段(包括 null 值)都序列化为 JSON 键值对。如果需要精简输出,可以调用 setSerializationInclusion(JsonInclude.Include.NON_NULL) 方法,这样在序列化时,任何值为 null 的字段都会被直接忽略,不会出现在输出的 JSON 中。

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Product {
private String name;
private String description; // 可能为 null
}
// 配置 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
Product product = new Product();
product.setName("Laptop");
product.setDescription(null);
String json = mapper.writeValueAsString(product);
// 输出: {"name":"Laptop"} (description 被省略)
基于程序中某个输入、条件或结果的具体问题
当 Java 对象中包含日期类型(如 Date 或 LocalDateTime)时,默认的序列化结果通常是一个包含时间戳或复杂结构的数字/对象,而不是人类可读的字符串。这是因为 Jackson 默认按照 ISO-8601 标准或内部表示法来序列化日期。若希望得到特定格式的字符串(例如 "yyyy-MM-dd HH:mm:ss"),需要显式配置 SimpleDateFormat 或使用 @JsonFormat 注解,否则输出的 JSON 将不符合常规的时间展示习惯。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











