sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1796 随笔 :: 22 文章 :: 24 评论 :: 226万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

@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
原文链接:https://blog.csdn.net/qq_42331108/article/details/133998284
posted on   sunny123456  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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实现全选、反选
点击右上角即可分享
微信分享提示