美文网首页
阿里巴巴fastjson @JSONField 注解说明

阿里巴巴fastjson @JSONField 注解说明

作者: 喊我小王吧 | 来源:发表于2018-12-20 16:36 被阅读0次

    阿里巴巴fastjson @JSONField 注解说明

    1 介绍

    1.1 依赖

    <dependency>
    ​ <groupId>com.alibaba</groupId>
    ​ <artifactId>fastjson</artifactId>
    ​ <version>1.2.47</version>
    </dependency>

    1.2 @jsonField注解

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
    public @interface JSONField {
        int ordinal() default 0;
    
        String name() default "";
    
        String format() default "";
    
        boolean serialize() default true;
    
        boolean deserialize() default true;
        //其他省略
    }
    

    1.3 @jsonField注解常用属性

    name : 给字段起别名

    ordinal :用来排序 输出json字符串中key属性的先后顺序 可以用 @JSONType (orders={})来代替

    format : 用来日期格式化

    serialize :指定字段不序列化

    deserialize :指定字段不序列化

    2 示例

    2.1 User类

    public class User {
    String a;
    String b;
    String c;
    String d;
    String z;
    //get  set 省略
    }
    

    2.2 json字符串中字段先后顺序排序

    我们来输出一下

    User  user =new User();
    user.setA("a");
    user.setB("b");
    user.setC("c");
    user.setD("d");
    user.setZ("e");
    
    System.out.println(JSON.toJSONString(user));
    

    结果:

    {"a":"a","b":"b","c":"c","d":"d","z":"e"}
    

    我们现在想要这样子的格式:z,a,b,c,d,e

    此时采用注解

    public class User {
    @JSONField(ordinal = 1)
    String a;
    @JSONField(ordinal = 2)
    String b;
    @JSONField(ordinal = 3)
    String c;
    @JSONField(ordinal = 4)
    String d;
    @JSONField(ordinal = 0)    // 默认是0  可以不加
    String z;
    //get  set 省略
    }
    

    输出

    {"z":"e","a":"a","b":"b","c":"c","d":"d"}
    

    或者我们可以采用另一个注解 注解在类上面 @JSONType(orders = {"z","a","b","c","d"})

    @JSONType(orders = {"z","a","b","c","d"})
    public class User {
    //省略
    }
    

    2.3 format 和 name 一起使用

    新增字段 Date 字段 ,然后 格式化,顺便给字段 z 起别名 z_name

        @JSONField(ordinal = 2)
        String a;
        @JSONField(ordinal = 3)
        String b;
        @JSONField(ordinal = 4)
        String c;
        @JSONField(ordinal = 5)
        String d;
        @JSONField(ordinal = 1 , name = "z_name")
        String z;
    
        @JSONField(ordinal = 0 ,format = "yyyy-MM-dd")
        Date z_date = new Date();
        //get set 省略
    

    输出

    {"z_date":"2018-12-20","z_name":"e","a":"a","b":"b","c":"c","d":"d"}
    

    serialize

    public class A {
          @JSONField(serialize=false)
          public Date date;
     }
    

    相关文章

      网友评论

          本文标题:阿里巴巴fastjson @JSONField 注解说明

          本文链接:https://www.haomeiwen.com/subject/fszykqtx.html