[Java] @JSONField注解常用的使用场景总结

应用场景: 当我们在与前端进行交互时,前端想要的字段与我们提供的字段名不同,这时候一种解决方案是修改实体类,但如果该实体类应用的比较多,那改起来的代价太大,因此,可以使用注解@JSONField来实现替换效果,用法如下:

@JSONField(name = "size_new")
private int size;

1. JSON内容与实体类,@JSONField常规写法

JSON(与下述JSON字符串内容一致)

{
    size: 5,
    weight: 10,
    colour: "red"
}

实体类(AppleDO.java)

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;

public class AppleDO {
    @JSONField(name = "size_new")
    private int size;

    @JSONField(name = "weight_new")
    private int weight;

    @JSONField(name = "colour_new")
    private String colour;

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public String getColour() {
        return colour;
    }

    public void setColour(String colour) {
        this.colour = colour;
    }
}

2. JSON字符串转对应Java对象
执行代码

public static void main(String[] args) {
    String json = "{\n" +
        "    size_new: 5,\n" +
        "    weight_new: 10,\n" +
        "    colour_new: \"red\",\n" +
        "}";
    AppleDO appleDO = JSON.parseObject(json, AppleDO.class);
    System.out.println(appleDO.getSize());
    System.out.println(appleDO.getWeight());
    System.out.println(appleDO.getColour());
}

运行结果
在这里插入图片描述

3. 支持序列化和反序列化

源码中的序列化和反序列化默认值均为true,则默认情况下是允许该字段序列化和反序列化的,如下:

boolean serialize() default true;
boolean deserialize() default true;

使用方法(以下不支持序列化,支持反序列化)

@JSONField(name = "size_new", serialize = false, deserialize = true)
private int size;

当我们的某些字段为空值时,我们仍希望将此字段返回到前端(该配置可以返回带有空字段的字符串,但是当字段为基本数据类型时无效,须将其转换为包装类)

@JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)

4. 指定字段顺序

将Java对象转换为JSON格式,转换后的字段顺序会根据首字母来排序,亦可通过如下方式来指定字段顺序:

@JSONField(name = "size_new", ordinal = 3)
private int size;

@JSONField(name = "weight_new", ordinal = 1)
private int weight;

@JSONField(name = "colour_new", ordinal = 2)
private String colour;

执行代码

AppleDO apple = new AppleDO();
apple.setSize(6);
apple.setWeight(12);
apple.setColour("green");
String appleStr = JSON.toJSONString(apple);
System.out.println(appleStr);

加ordinal参数之前运行结果
在这里插入图片描述

加ordinal参数之后运行结果
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值