@JSONField(serialize = false)
是 阿里巴巴 Fastjson 库 提供的注解,用于控制 Java 对象与 JSON 数据转换时的字段行为。以下是详细说明:
作用
- 禁用字段的序列化
当使用 Fastjson 将 Java 对象转换为 JSON 字符串时,被标记的字段不会包含在生成的 JSON 中。
典型场景:隐藏敏感信息(如密码、密钥)或不必要传输的字段。
示例
java">public class User {private String name;@JSONField(serialize = false)private String password;// Getters and Setters
}
- 序列化结果
java">User user = new User(); user.setName("Alice"); user.setPassword("123456");String json = JSON.toJSONString(user); // 输出: {"name":"Alice"} (password 字段被忽略)
其他常用参数
-
name
指定字段在 JSON 中的名称,实现字段重命名:java">@JSONField(name = "user_name") private String name; // 序列化为 {"user_name":"Alice"}
-
deserialize
控制字段是否参与反序列化(JSON → 对象):java">@JSONField(serialize = false, deserialize = false) private String password; // 序列化和反序列化均忽略该字段
-
format
自定义日期格式:java">@JSONField(format = "yyyy-MM-dd") private Date birthDate;
-
ordinal
控制字段在 JSON 中的顺序:java">@JSONField(ordinal = 1) private String name; // 在 JSON 中排在前面
注意事项
-
仅适用于 Fastjson
该注解是 Fastjson 特有,若项目使用其他库(如 Jackson 或 Gson),需使用对应注解:- Jackson:
@JsonIgnore
- Gson:
@Expose(serialize = false)
- Jackson:
-
默认行为
未设置deserialize
时,字段默认参与反序列化。若需完全忽略字段,需显式设置deserialize = false
。
总结
- 核心用途:在 Fastjson 序列化过程中排除特定字段。
- 扩展配置:通过参数调整字段名称、顺序、格式及反序列化行为。
- 适用场景:敏感信息保护、减少数据传输冗余、字段名映射等。