@JSONField注解的使用

主要用于解决前后端字段名称不一致

1.实体类

package com.yuanshenapi.garden.vo;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;

import java.math.BigDecimal;

@Data
@Accessors(chain = true)
public class Flower {

    @JSONField(name = "flower_color")
    private String color;

    private String name;

    @JSONField(name = "flower_size")
    private BigDecimal size;
    
    @JSONField(name = "flower_feature")
    private String feature;
}

 2.JSON序列化与反序列化

只要json字符串中的字段名称可与实体上@JSONField注解中name属性中的名称对应上就可以实现反序列化,打算反序列化的json字符串可比原有实体字段少也可多于原有字段。

Flower flower = new Flower();
        flower
                .setColor("red")
                .setName("小红")
                .setSize(new BigDecimal("12.56"));
        System.out.println("序列化前对象"+flower);
        String jsonString = JSONObject.toJSONString(flower);
        System.out.println("序列化后json字符串:"+jsonString);
        System.out.println("========================================");
        JSONObject jsonObject = JSONObject.parseObject(jsonString);
        jsonObject.put("flower_feature", "cold");
        jsonObject.put("owner","zhangsan");
        String str = JSONObject.toJSONString(jsonObject);
        System.out.println("反序列化前json字符串"+str);
        Flower flowerAfter = JSONObject.parseObject(str, Flower.class);
        System.out.println("反序列化后对象"+flowerAfter);

输出打印:

序列化前对象Flower(color=red, name=小红, size=12.56, feature=null)
序列化后json字符串:{"flower_color":"red","flower_size":12.56,"name":"小红"}
========================================
反序列化前json字符串{"owner":"zhangsan","flower_feature":"cold","flower_color":"red","flower_size":12.56,"name":"小红"}
反序列化后对象Flower(color=red, name=小红, size=12.56, feature=cold)

3.其他使用

@JSONField(name = "flower_color") 用于解决后台字段名称和前端取值不一致的情况;
@JSONField(ordinal = 0) 序列化字段的顺序,默认是0;
@JSONField(name = "birth_date", format = "yyyy-MM-dd HH:mm:ss") 作用于Date属性上,自动格式化日期为string
package com.yuanshenapi.garden.vo;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.Date;

@Data
@Accessors(chain = true)
public class Flower {

    @JSONField(name = "birth_date", format = "yyyy-MM-dd HH:mm:ss")
    private Date create;
}
        Flower flower = new Flower();
        flower.setCreate(new Date());
        System.out.println("序列化前对象"+flower);
        String jsonString = JSONObject.toJSONString(flower);
        System.out.println("序列化后json字符串:"+jsonString);
        System.out.println("========================================");
        JSONObject jsonObject = JSONObject.parseObject(jsonString);
        String str = JSONObject.toJSONString(jsonObject);
        System.out.println("反序列化前json字符串"+str);
        Flower flowerAfter = JSONObject.parseObject(str, Flower.class);
        System.out.println("反序列化后对象"+flowerAfter);

输出打印: 

序列化前对象Flower(create=Mon Nov 28 21:39:31 CST 2022)
序列化后json字符串:{"birth_date":"2022-11-28 21:39:31"}
========================================
反序列化前json字符串{"birth_date":"2022-11-28 21:39:31"}
反序列化后对象Flower(create=Mon Nov 28 21:39:31 CST 2022)
@JSONField(serialize = false) 是否要把这个字段序列化成json字符串,默认是true,如果设置为false,该字段不会出现在序列化后的json字符串中
@JSONField(deserialize = false) 字段是否需要进行反序列化,默认是true,如果设置为false,该字段不会出现在被序列化到实体中。
    @JSONField(name = "flower_color")
    private String color;

    @JSONField(serialize = false)
    private String name;

    @JSONField(name = "flower_size")
    private BigDecimal size;

    @JSONField(name = "flower_feature")
    private String feature;
        Flower flower = new Flower();
        flower
                .setColor("red")
                .setName("小红")
                .setSize(new BigDecimal("12.56"));
        System.out.println("序列化前对象"+flower);
        String jsonString = JSONObject.toJSONString(flower);
        System.out.println("序列化后json字符串:"+jsonString);
        System.out.println("========================================");
        JSONObject jsonObject = JSONObject.parseObject(jsonString);
        jsonObject.put("flower_feature", "cold");
        jsonObject.put("owner","zhangsan");
        String str = JSONObject.toJSONString(jsonObject);
        System.out.println("反序列化前json字符串"+str);
        Flower flowerAfter = JSONObject.parseObject(str, Flower.class);
        System.out.println("反序列化后对象"+flowerAfter);

输出打印: 

序列化前对象Flower(color=red, name=小红, size=12.56, feature=null)
序列化后json字符串:{"flower_color":"red","flower_size":12.56}
========================================
反序列化前json字符串{"owner":"zhangsan","flower_feature":"cold","flower_color":"red","flower_size":12.56}
反序列化后对象Flower(color=red, name=null, size=12.56, feature=cold)


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值