Fastjson @JsonField注解使用

时间:2020-07-30 19:16:37 来源:

【摘要】 Fastjson @JsonField注解使用考必过小编为大家整理了关于Fastjson @JsonField注解使用的信息,希望可以帮助到大家!

Fastjson @JsonField注解使用

标签:public   很多   key   mac   als   插件   否则   如何   get   

【引言】

在开发中,不论是前后端联调,还是与第三方对接,有时候难免会遇到对方定义的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

Fastjson @JsonField注解使用

标签:public   很多   key   mac   als   插件   否则   如何   get   

以上就是Fastjson @JsonField注解使用的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
Fastjson1.2.68 绕Autotype的一点总结 Fastjson反序列化漏洞利用分析
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net