@JSONField 坑点 结论:若属性是私有的,必须有set*方法。否则无法反序列化。
@JSONField 坑点
结论:若属性是私有的,必须有set*方法。否则无法反序列化。
原因:
主要原因是 JSONField 注解是通过反射来操作对象的属性的,而在 Java 类中一般情况下,字段是私有的,不能直接访问。所以需要通过 get 方法来获取字段的值,通过 set 方法来设置字段的值。
假设一个字段名为 data,则 JSONField 注解会尝试调用 getData() 方法来获取字段的值,在反序列化时将 JSON 字符串中对应的值设置给字段;在序列化时会调用 setData() 方法来获取字段的值,将其作为 JSON 字符串中对应的值。
如果没有对应的 get 和 set 方法,JSONField 注解就无法直接访问字段,从而无法完成反序列化和序列化操作。
使用
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
//说明可以作用与三种类型之上
/*这意味着带有这个注解的注解可以用于方法(包括构造方法)、字段和参数。*/
- ElementType.METHOD 表示注解可以用于方法,包括实例方法以及静态方法。
- ElementType.FIELD 表示注解可以用于字段,表示类的属性。
- ElementType.PARAMETER 表示注解可以用于方法的参数。
- 1
- 2
- 3
- 4
- 5
- 6
eg:
1FieldInfo可以配置在getter/setter方法或者字段上。例如:
public class A {
private int id;
@JSONField(name="ID")
public int getId() {return id;}
@JSONField(name="ID")
public void setId(int value) {this.id = id;}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2 配置在field上
public class A {
@JSONField(name="ID")
private int id;
public int getId() {return id;}
public void setId(int value) {this.id = id;}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3 使⽤format配置⽇期格式化
public class A {
// 配置date序列化和反序列使⽤yyyyMMdd⽇期格式
@JSONField(format="yyyyMMdd")
public Date date;
}
- 1
- 2
- 3
- 4
- 5
4 使⽤serialize/deserialize指定字段不序列化
public class A {
@JSONField(serialize=false)
public Date date;
}
- 1
- 2
- 3
- 4
5 使⽤ordinal指定字段的顺序
注:缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列的你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
public static class VO {
@JSONField(ordinal = 3)
private int f0;
@JSONField(ordinal = 2)
private int f1;
@JSONField(ordinal = 1)
private int f2;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
标签:
java
, spring boot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2023-04-07 Java serialVersionUID 作用和自动生成设置
2022-04-07 ELEMENTUI的表格树(树型结构表格),很简单方式,EL-TABLE只需要小小改动几个地方
2022-04-07 js中的foreach用法 array.forEach(function(element) { console.log(element); });
2022-04-07 Java过滤list空字符串
2022-04-07 java中String数组和List的互相转化 List<String> strsToList1= Arrays.asList(strs);
2022-04-07 JS数组转字符串(3种方法) arrays.join("-")把数组使用-分割为字符串
2022-04-07 vue使用el-tree实现全选、反选