【引言】

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

【实例】

一. @JsonField注解

  1. 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;
}
  1. 可以配置在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;

【总结】

简单的东西,也需要我们去发现,去积累。

GitHub 加速计划 / fastj / fastjson
25.69 K
6.51 K
下载
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
最近提交(Master分支:3 个月前 )
c942c834 - 1 年前
5bc4709b - 1 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐