fastjson使用-- @JSONField使用(转)

Posted 何其有静

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fastjson使用-- @JSONField使用(转)相关的知识,希望对你有一定的参考价值。

@JSONField可以配置到字段和方法上,那不同的配置有什么不同呢?下面我们就来看看具体配置到不同的方法上。

我们在创建实体类的时候,都要求属性必须创建get和set方法,否则fastjson将不会进行识别,下面我们看看把@JSONField配置到具体的get和set方法上

/**
 * @Title: getDate 
 * @Description: 配置序列化的时候,日期序列化为startDate
 * @return Date
 */
@JSONField(name = "startDate")
public Date getDate() {
    return date;
}
    
/**
 * @Title: setDate 
 * @Description: 配置反序列化的时候,以endDate去匹配
 * @param date
 * @return void
 */
@JSONField(name = "endDate")
public void setDate(Date date) {
    this.date = date;
}
    
/**
 * @Title: getId 
 * @Description: 配置序列化的时候,不序列化id
 * @return int
 */
@JSONField(serialize = false)
public int getId() {
    return id;
}
    
/**
 * @Title: setId 
 * @Description: 配置反序列化的时候,不反序列化id
 * @return void
 */
@JSONField(deserialize = false)
public void setId(int id) {
    this.id = id;
}

具体的代码,就是上面的,挺简单的。下面来看看结果:

{"age":25,"name":"LiLei","sex":"男","startDate":1451985134688}
User [id=0, name=LiLei, age=25, sex=男, date=Tue Jan 05 17:04:47 CST 2016

我们看到id既没有序列化也没有反序列化,date字段序列化的时候变为了startDate

我们再来看看下面的代码看看结果跟上面做个比较:

// 反序列化
String jsonStr = "{"id":10,"age":25,"name":"LiLei","sex":"男","startDate":1451984687404}";
// @JSONField配置了,不反序列化id,date的匹配name为endDate
Uo2 uo = JSON.parseObject(jsonStr, Uo2.class);
System.out.println(uo.toString());

再来看看结果:

User [id=0, name=LiLei, age=25, sex=男, date=null]

这个时候我们看到没有识别到date,因为我们在date字段的set方法上配置了@JSONField(name = "endDate")所以其在识别的时候,是通过endDate去识别key的,而我们的json数据里根本没有endDate这个key,所以没法识别。

 

根据上面我们可以总结出一个结论:

1.序列化(JavaBean --> json)时配置到对应字段的get()方法上

2.反序列化(json --> JavaBean)时配置到对应字段的set()方法上

以上是关于fastjson使用-- @JSONField使用(转)的主要内容,如果未能解决你的问题,请参考以下文章

Fastjson @JsonField注解使用

Fastjson @JsonField 不起作用

fastJson的@JSONField和jackson的@JsonProperty使用

FastJson中@JSONField注解使用

源码分析之FastJson全局配置日期格式导致@JSONField(format = "yyyy-MM-dd")注解失效

fastjson简单使用demo,@JSONField注解属性字段上与setget方法上。实体类toString(),实体类转json的区别;_下划线识别