jsonproperty及jsonfield注解的使用
1.jsonproperty
1.1.说明
@jsonproperty
注解是 jackson 库中的一个注解,广泛用于 java 对象与 json 数据之间的序列化和反序列化。
jackson 是一个流行的 java 库,能够将 java 对象转换为 json 格式,反之亦然。
1.2.主要功能
- 指定属性名:
@jsonproperty
可以用来定义 json 中使用的属性名称,即使它与 java 类中的属性名称不同。这在需要匹配特定 json 格式时非常有用。 - 处理字段的可见性: 可以控制字段是否应该被序列化或反序列化。
- 设置默认值: 可以为字段提供默认值。
- 标记字段的必需性: 可以指示某个字段在反序列化过程中是必需的
1.3.常见属性
value
: 指定 json 字段的名称。required
: 布尔值,指示在反序列化时该字段是否是必需的(默认为 false)。defaultvalue
: 指定一个默认值,当 json 数据中没有提供该字段时使用。
import com.fasterxml.jackson.annotation.jsonproperty; public class product { @jsonproperty(value = "product_id", required = true) private int id; @jsonproperty(value = "product_name", defaultvalue = "unnamed product") private string name; // getters and setters... }
1.4.示例
import com.fasterxml.jackson.annotation.jsonproperty; public class user { @jsonproperty("user_id") private int id; @jsonproperty("user_name") private string name; @jsonproperty("user_email") private string email; // getters and setters public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getemail() { return email; } public void setemail(string email) { this.email = email; } }
给定上面的 user
类,下面是其对应的 json 表示:
{ "user_id": 1, "user_name": "john doe", "user_email": "john.doe@example.com" }
2.jsonfield
2.1说明
@jsonfield
是一个来自于阿里巴巴的 fastjson 库的注解,主要用于处理 java 对象与 json 数据之间的序列化和反序列化。
fastjson 是一个高性能的 java 语言编写的 json 处理工具。一般使用fastjson2。
2.2主要功能
- 指定字段名称:
@jsonfield
可以用来定义在 json 中使用的属性名称,即使它与 java 类中的属性名称不一致。这对于需要匹配特定 json 格式的场景非常有用。 - 控制序列化/反序列化: 可以控制某个字段是否参与序列化和反序列化。例如,可以通过设置
serialize
或deserialize
属性为false
来排除该字段。 - 格式化日期: 可以指定日期字段在 json 中的格式,这对于日期类型的字段尤为重要。
- 定义默认值: 在反序列化时,可以指定默认值,以便当 json 数据中缺少该字段时使用。
2.3常用属性
name
: 指定 json 字段的名称。serialize
: 布尔值,指示该字段是否参与序列化(默认为 true)。deserialize
: 布尔值,指示该字段是否参与反序列化(默认为 true)。format
: 用于格式化时间字段,例如"yyyy-mm-dd"
。
import com.alibaba.fastjson.annotation.jsonfield; public class product { @jsonfield(name = "product_id", serialize = true, deserialize = true) private int id; @jsonfield(name = "product_name", defaultvalue = "unnamed product") private string name; @jsonfield(name = "created_at", format = "yyyy-mm-dd hh:mm:ss") private date createdat; // getters and setters... }
2.4示例
import com.alibaba.fastjson.annotation.jsonfield; public class user { @jsonfield(name = "user_id") private int id; @jsonfield(name = "user_name") private string name; @jsonfield(name = "user_email") private string email; // getters and setters public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getemail() { return email; } public void setemail(string email) { this.email = email; } }
使用上面的 user
类,下面是其对应的 json 表示:
{ "user_id": 1, "user_name": "john doe", "user_email": "john.doe@example.com" }
3.使用场景
避免使用lombok的data注解,导致前端接收的json内容的key和后端中bean的id不一致的问题,可以使用上面两个注解,当然也可以手写get set方法,避免此问题
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论