zoukankan      html  css  js  c++  java
  • Fastjson @JsonField注解使用

    【引言】

    在开发中,不论是前后端联调,还是与第三方对接,有时候难免会遇到对方定义的json数据中的key值与自己后端定义的实体字段不一致的情况,也有时候会遇到前端传的日期数据需要进行格式转换的问题。本篇博客接下来要总结的这个注解,可以很方便的处理我们的问题,下面就一起看看如何使用。

    【实例】

    一. @JsonField注解

    JsonField注解是阿里开发的fastjson中的注解,代码如下

    // 若属性是私有的,必须有set*方法。否则无法反序列化。
    public @interface JSONField {
    // 配置序列化和反序列化的顺序,1.1.42版本之后才⽀持
    int ordinal() default 0;
    // 指定字段的名称
    String name() default "";
    // 指定字段的格式,对⽇期格式有⽤
    String format() default "";
    // 是否序列化
    boolean serialize() default true;
    // 是否反序列化
    boolean deserialize() default true;
    }

    可以配置在getter/setter⽅法或者字段上。我们项目中使用了Lombok插件,省去了get/set方法,所以直接配置在字段上使用,如下:

        /**
         * 应收款
         */
        @JSONField(name = "YS")
        private BigDecimal receivables;
    
        /**
         * 付款方式
         */
        @JSONField(name = "FKFS")
        private String payType;
    
        /**
         * 确认操作员
         */
        @JSONField(name = "PER")
        private String person;
        ...

    以上代码中,JsonField注解中name中的值,诸如YS,PER等,就是与第三方对接返回给我们的数据字段以及我们调用其接口需要传给他们的字段,我们的实体肯定不能按这样的字段定义,我们也不能要求别人把接口都修改一遍,所以,使用这个注解,可以直接实现对方的json字段与我们实体的字段分别对应,也不需要做任何修改。

    1. 除了上面name的使用,JsonField还可以指定字段是否序列化,字段顺序及字段的输出格式,代码示例如下:
    //1. 指定字段不序列化
        @JSONField(serialize=false)
        public Date date;
    
    //2.  指定字段顺序
        @JSONField(ordinal = 3)
        private int f0;
        @JSONField(ordinal = 2)
        private int f1;
        @JSONField(ordinal = 1)
        private int f2;
    
    //3. 配置date序列化和反序列使⽤yyyyMMdd⽇期格式
        @JSONField(format="yyyyMMdd")
        public Date date;

    关于FastJson属性别名的问题,网上很多文章都指出@JSONField(name = "***")必须要注解在setter和getter上面;

    但是实际测试compile 'com.alibaba:fastjson:1.1.56'版本的FastJson发现@JSONField注解其实可以直接写到属性名上面

    JSONObject对象里字段排序问题

    String student = JSONObject.toJSONString(student, SerializerFeature.SortField.MapSortField); //指定顺序输出,同时在 bean的属性上标记 @JSONField(ordinal = 序号)

    或者在插入Json元素的时候,先后排序可以直接在创建实例之时指定
            JSONObject jsonObject = new JSONObject(true);
            jsonObject.put("a","1");
            jsonObject.put("b","2");
            jsonObject.put("c","3");
            jsonObject.put("d","4");
            jsonObject.put("e","5");
            jsonObject.put("ac","6");
            System.out.println(JSONObject.toJSONString(jsonObject);

    ref: https://blog.csdn.net/hu_zhiting/article/details/85239765?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

  • 相关阅读:
    使用MaxCompute Java SDK 执行任务卡住了,怎么办?
    通过编辑文件的方式对DNS服务器进行配置
    2009级计算机应用 嵌入式方向课表
    微软首宗针对中国大企业盗版案宣判:获赔217万
    小數點的運算[討論區- PHP新手區] : 台灣PHP聯盟
    Linux C编程一站式学习
    用wget做站点镜像
    2008级嵌入式方向学生 学习成果(创意)
    Linux领航未来操作系统
    fedora12 微软雅黑
  • 原文地址:https://www.cnblogs.com/yoyowin/p/13403024.html
Copyright © 2011-2022 走看看