fastjson不转某些字段_关于fastjson的@JSONField注解的⼀
些问题(详解)
@JSONField
看源码它可以作⽤于字段和⽅法上。
引⽤⽹上说的,
⼀、作⽤Field
@JSONField作⽤在Field时,其name不仅定义了输⼊key的名称,同时也定义了输出的名称。
但是我在使⽤中,发现并不如上所说。
例如
@JSONField(name="project_id")
private Long ProjectID
发现bean 转json的时候并是"project_id":xxx的形式,json转bean的时候也不会把"project_id":xx的内容设置到ProjectID的⾥⾯。
fastjson的版本是1.1.15
⼆、作⽤在setter和getter⽅法上 这种⽅式倒是在使⽤的过程当中符合期望。
/**bean 转json 时会把bean中的ProjectID转换为project_id */
@JSONField(name="project_id")
public Long getProjectID() {
return ProjectID;
}
/**json 转bean 时会把json中的project_id值赋值给projectID*/
@JSONField(name="project_id")
public void setProjectID(Long projectID) {
ProjectID = projectID;
}
三、@JSONField其它⽤法,查看@JSONField注解的源码,除了name可⽤之外,还有
format,serialize,deserialize,serialzeFeatures,parseFeatures可⽤,
·format,貌似⽤在Date类型的字段来格式化时间格式⽐较有⽤。
·serialize和deserialize是布尔类型的,⽤法为
@JSONField(serialize=false)
private Long ProjectID
就是在序列化的时候就不包含这个字段了。deserialize与之相反。但是有⼀点需要注意,我看其它地⽅说,当字段为final的时候注解放在字段上是不起作⽤的,这时候应该放在get
或set⽅法上。
·
serialzeFeatures,我⽤到这个属性,fastjson默认的序列化规则是当你的字段的值为null的时候,它是不会给你序列化这个字段的,例如我有⼀个这样的需求,
{"fieldName":"project_id","operator":"is not","value":null}
⼀个对象序列化成这样,我的代码如下
CriteriaVO criteriaVO = new CriteriaVO();
fastjson忽略属性criteriaVO.setFieldName("project_id");
criteriaVO.setOperator("is not");
criteriaVO.setValue(null);
默认的它只会序列化为如下结果
{"fieldName":"project_id","operator":"is not"}
当然fastjson还是允许你控制⼀下序列化的规则的。
这就⽤到了SerializerFeature,这个⼀个枚举,⾥⾯有好⼏个值 ,具体的含义⼤家有兴趣的可以了解⼀下,
我只是⽤到了其中⼀个,
@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
private String value;
这样当value的值为null的时候,依然会把它的值序列化出来。也就是下⾯的样⼦,这就是我想要的结果
{"fieldName":"project_id","operator":"is not","value":null}
⼜遇到了另⼀个问题,当字段类型为int类型时,如
private int start;
private int limit;
我如果不set值的时候,会序列化为下⾯这样
"limit":0,"start":0
默认为都是0了,⽽我的⽬标是如果不设置值的时候,它们不会出现。
我是简单地通过把他们的类型改为Integer了。应该有其它通过⾃定义序列化⾏为的⽅式来解决,暂不研究。
以上这篇关于fastjson的@JSONField注解的⼀些问题(详解)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持脚本之家。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论