使用场景:字段和方法
1、字段:根据@JSONField(name=“XXX”) 中的name 对string转换为类时name中的描述就是转换后的字段名称
2、方法:在set方法前和在get方法前
当JSON.parseObject(str,class)方法被调用时,set方法被调用,方法上面的@JSONField(name="XXX")中的XXX属性,将json中的XXXkey被赋值到set方法描述的属性中。
当JSON.toJSONString(dto)方法被调用时,get方法被调用,方法上面的@JSONField(name="XXX")中的XXX属性,就是得到的jsonString中的属性的key。
例子如下:
package json.dto;
import com.alibaba.fastjson.annotation.JSONField;
import java.util.Date;
/**
* @Auther: liyongli
* @Date: 2018/8/15 14:02
* @Description:
*/
public class DepositDTO {
@JSONField(ordinal = 1)
private String id;
@JSONField(ordinal = 2)
private Integer depositAmount;
@JSONField(ordinal = 3)
private Date createTime;
@JSONField(ordinal = 4,name = "delete_flag")
private String deleteFlag;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@JSONField(name = "amount")
public Integer getDepositAmount() {
System.out.println("get 方法被调用");
return depositAmount;
}
@JSONField(name = "depositamt")
public void setDepositAmount(Integer depositAmount) {
System.out.println("set 方法被调用");
this.depositAmount = depositAmount;
}
@JSONField(format = "YYYY-MM-dd HH:mm:ss")
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(String deleteFlag) {
this.deleteFlag = deleteFlag;
}
@Override
public String toString() {
return super.toString();
}
}
package json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import json.dto.DepositDTO;
import java.util.Date;
/**
* @Auther: liyongli
* @Date: 2018/8/15 14:05
* @Description:
*/
public class JsonTest {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id",1);
jsonObject.put("depositamt", 100);
jsonObject.put("deleteflag", 0);
jsonObject.put("name", "liyongli");
jsonObject.put("create_time", new Date());
System.out.println(jsonObject);//同jsonObject.toString(),jsonObject.toJSONString()
System.out.println("调用JSON.parseObject方法时:");
DepositDTO depositDTO = JSON.parseObject(jsonObject.toString(),DepositDTO.class);//set方法被调用,用string中的key和@JSONFIELD中的那么对应
System.out.println(depositDTO);
//
// DepositDTO depositDTO1 = JSONObject.parseObject(jsonObject.toJSONString(), DepositDTO.class);
// System.out.println(depositDTO1);
System.out.println("调用JSON.toJSONString方法时:");
System.out.println(JSON.toJSONString(depositDTO));//get方法被调用,将被转换成JSONField标签中的那么值
}
}
运行结果:
{"deleteflag":0,"create_time":1534317037530,"depositamt":100,"name":"liyongli","id":1}
调用JSON.parseObject方法时:
set 方法被调用
json.dto.DepositDTO@77afea7d
调用JSON.toJSONString方法时:
get 方法被调用
{"amount":100,"id":"1","createTime":"2018-08-15 15:10:37","delete_flag":"0"}