主要用于解决前后端字段名称不一致
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)