FastJson小技巧——@JSONField的史上最全最详细讲解——一看就会

FastJson小技巧——@JSONField的史上最全最详细讲解——一看就会常见 使用 fastjson 进行需要对字段进行一些特殊处理 比如时间格式 前后端名字不一致 字段为 null 是否依然序列化等问题 那么 fastjson 的 JSONField 就能很好的解决这些问题 JSONField 注解的源码如下 Retention RetentionPol RUNTIME Target ElementType METHOD ElementType FIELD ElementType PARAMETER public interfaceJSO

常见:使用fastjson进行需要对字段进行一些特殊处理,比如时间格式,前后端名字不一致,字段为null是否依然序列化等问题。那么fastjson的@JSONField就能很好的解决这些问题。

@JSONField注解的源码如下

@Retention(RetentionPolicy.RUNTIME) @Target({ 
    ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) public @interface JSONField { 
    int ordinal() default 0; //是根据fieldName的字母序进行序列的,你可以通过ordinal指定字段的顺序 String name() default ""; //序列化和反序列化时候的别名 String format() default ""; //用于字符串格式的日期转换 boolean serialize() default true; // 是否参与序列化 boolean deserialize() default true; //是否参与反序列化 SerializerFeature[] serialzeFeatures() default { 
   }; //序列化选项 SerializerFeature.WriteNullNumberAsZero 如空Number填充0 Feature[] parseFeatures() default { 
   }; //反序列化选项 String label() default ""; //标签, boolean jsonDirect() default false; //当你有⼀个字段是json字符串的数据,你希望直接输出,⽽不是经过转义之后再输出。 Class<?> serializeUsing() default Void.class; // 属性的序列化类,可定制。可有现存的,比如本来是Long,序列化的时候转为String:serializeUsing= ToStringSerializer.class Class<?> deserializeUsing() default Void.class; // 属性的反序列化类,可定制。 String[] alternateNames() default { 
   }; //参与反序列化时候的别名 boolean unwrapped() default false; // 对象映射到父对象上。不进行子对象映射。简单而言,就是属性为对象的时候,属性对象里面的属性直接输出当做父对象的属性输出 String defaultValue() default ""; //设置默认值 } 
public class JSONController { 
    public static void main(String[] args) { 
    Nation nationBean1 = Nation.builder().dress("现代服饰").num(1314).build(); String str = JSON.toJSONString(nationBean1); System.out.println(str); //{"name":"汉族","number":1314} Nation nation = JSON.parseObject(str, Nation.class); System.out.println(JSON.toJSONString(nation)); //{"name":"汉族"} } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class Nation { 
    @JSONField(defaultValue = "汉族") private String name; @JSONField(ordinal = 1, name = "DRESS", serialize = false) private String dress; @JSONField(ordinal = 2, name = "number", deserialize = false) private Integer num; @JSONField(ordinal = 3, format = "yyyy-MM-dd") private Date celebrateHoliday; } 
public class JSONController { 
    public static void main(String[] args) { 
    Nation nationBean1 = Nation.builder().name("汉族").build(); String str = JSON.toJSONString(nationBean1); System.out.println(str); //{"celebrateHoliday":null,"name":"汉族","num":0} } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class Nation { 
    private String name; private String dress; @JSONField(serialzeFeatures = SerializerFeature.WriteNullNumberAsZero) private Integer num; @JSONField(serialzeFeatures = SerializerFeature.WriteMapNullValue) private Date celebrateHoliday; } 
public class JSONController { 
    public static void main(String[] args) { 
    Nation nationBean1 = Nation.builder().name("汉族").dress("便服").num(12).celebrateHoliday(new Date()).build(); String str = JSON.toJSONString(nationBean1, Labels.includes("a")); System.out.println(str); //{"num":12} String str2 = JSON.toJSONString(nationBean1, Labels.excludes("a")); System.out.println(str2); //{"celebrateHoliday":86,"dress":"便服","name":"汉族"} } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class Nation { 
    private String name; private String dress; @JSONField(label = "a") private Integer num; @JSONField(label = "b") private Date celebrateHoliday; } 
public class JSONController { 
    public static void main(String[] args) { 
    Nation nationBean1 = Nation.builder().name("{}").dress("{}").build(); String str = JSON.toJSONString(nationBean1); System.out.println(str); //{"dress":"{}","name":{}} } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class Nation { 
    @JSONField(jsonDirect = true) private String name; @JSONField(jsonDirect = false) private String dress; private Integer num; private Date celebrateHoliday; } 
public class JSONController { 
    public static void main(String[] args) { 
    Nation nationBean1 = Nation.builder().name("汉族").num(2323).build(); String str = JSON.toJSONString(nationBean1); System.out.println(str); //{"name":"中国的汉族","num":"2323"} } public static class MySerializer implements ObjectSerializer { 
    @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { 
    String text = "中国的" + (String) object; serializer.write(text); } } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class Nation { 
    @JSONField(serializeUsing = JSONController.MySerializer.class) private String name; private String dress; @JSONField(serializeUsing = ToStringSerializer.class) private Integer num; private Date celebrateHoliday; } 
public class JSONController { 
    public static void main(String[] args) { 
    String str ="{\"Name\":\"汉族\",\"num\":2323}"; System.out.println(JSON.toJSONString(JSON.parseObject(str, Nation.class))); //{"name":"汉族","num":2323} } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class Nation { 
    @JSONField(alternateNames = { 
   "name", "Name"}) private String name; private String dress; private Integer num; private Date celebrateHoliday; } 
public class JSONController { 
    public static void main(String[] args) { 
    QSM qsm = new QSM(); qsm.setName("传闻中的陈芊芊"); qsm.setCity("花垣城"); QSM qsm2 = new QSM(); qsm2.setName("传闻中的韩烁"); qsm2.setCity("玄虎城"); Nation nation1 = Nation.builder().name("中国").qsm(qsm).qsm2(qsm2).build(); System.out.println(JSON.toJSONString(nation1)); //{"name":"中国","city":"花垣城","name":"传闻中的陈芊芊","qsm2":{"city":"玄虎城","name":"传闻中的韩烁"}} } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class Nation { 
    private String name; @JSONField(unwrapped = true) private QSM qsm; @JSONField(unwrapped = false) private QSM qsm2; } @Data class QSM { 
    String name; String city; } 

【完】

正在去BAT的路上修行








版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225359.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:31
下一篇 2026年3月17日 上午9:31


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号