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();
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注解的一点问题的更多相关文章
- FastJson中@JSONField注解使用
最近做项目中,使用了json格式在服务器之间进行数据传输.但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式. 思路: ...
- fastjson的@JSONField注解
@JSONField作用:在字段和方法上1.Field:@JSONField作用在Field时,name可以定义输入key的名字,反序列化的时 值不会赋值到属性上2.作用在setter和getter方 ...
- fastjson简单使用demo,@JSONField注解属性字段上与set、get方法上。实体类toString(),实体类转json的区别;_下划线-减号大小写智能匹配
一.demo代码 @JSONField注解属性字段上与set.get方法上.使用@Data注解(lombok插件安装最下方),对属性“笔名”[pseudonym]手动重写setter/getter方法 ...
- Fastjson妙用之@JSONField注解
在开发的过程中使用json格式的地方非常多,现在前后端分离的项目中,前后端数据交换的格式一般为json,这种格式的优/缺点这里不再赘述,感兴趣的可以百度.把java中的实体类序列化为json的方式也有 ...
- @JSONField注解的使用
FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个: 修改和json字符串的字段映射[name] 格式化数据[format] 过滤掉不需要序列化的 ...
- @JSONField 注解说明
转自:https://blog.csdn.net/suyimin2010/article/details/80617538 导入@JSONField 注解: import com.alibaba.fa ...
- fastjson使用-- @JSONField使用(转)
@JSONField可以配置到字段和方法上,那不同的配置有什么不同呢?下面我们就来看看具体配置到不同的方法上. 我们在创建实体类的时候,都要求属性必须创建get和set方法,否则fastjson将不会 ...
- @RequestParam,@RequestBody,@ResponseBody,@PathVariable注解的一点小总结
一.前提知识: http协议规定一次请求对应一次响应,根据不同的请求方式,请求的内容会有所不同: 发送GET请求是没有请求体的,参数会直接拼接保留到url后一并发送: 而POST请求是带有请求体的,带 ...
- @Valid注解的一点理解
@Valid注解存在于spring-boot-starter-web包下,只要项目中存在该依赖就无需自行导入,也就是说该注解适用于springboot项目此注解用于表单验证,简化了判断代码用法:格式如 ...
随机推荐
- 20181016-4 Alpha阶段第1周/共2周 Scrum立会报告+燃尽图 04
此作业要求https://edu.cnblogs.com/campus/nenu/2018fall/homework/2248 Scrum master:徐常实 一.小组介绍 组长:王一可 组员:范靖 ...
- 安装VS的过程
软件工程学习到第三周,我们需要下载一个新的软件,用来进行软件测试.刚开始知道的时候觉得没甚么,不就是下个软件吗!有什么大不了的,分分钟搞定的事.可是想象很美好,现实很骨感.这是一个巨大的工作量呀,不仅 ...
- Java:类集框架中集合的学习
Java:类集框架中集合的学习 集合 Java:Set的学习 Set是类集框架中的集合类.集合是不按特定的方式排序,并且没有重复对象的一种类. Q:Set如何操作?Set中的不按特定方式排序是怎么排序 ...
- 项目Beta冲刺(团队)第二天
1.昨天的困难 夜间模式实现的时候一点击开关就会出现app黑屏卡死的状态,recreate()方法实现有问题 服务器有点问题 2.今天解决的进度 成员 进度 陈家权 研究如何实现私信模块 赖晓连 最新 ...
- html个人网页
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 将 Spring 和 Hibernate 与 WebSphere Application Server 一起使用
本文摘要 如果您考虑将 Spring 或 Hibernate 与 IBM® WebSphere® Application Server 一起使用,则本文向您阐述了如何配置这些框架,以适用于 WebSp ...
- 主从复制redis
编辑主服务器的配置文件 注释下面一项 # slaveof 192.168.10.1 6379 主从复制 一主可以有多从,支持链式连级 一主多从 1:修改从服务器的配置文件/etc/redis.co ...
- 使用salt-cloud创建虚拟机
salt-cloud也是基于openstack来做的,它可以支持多种云的使用.比如:Aliyun.Azure.DigitalOcean.EC2.Google Compute Engine.HP Clo ...
- Building microservices with ASP.NET Core (without MVC)(转)
There are several reasons why it makes sense to build super-lightweight HTTP services (or, despite a ...
- 深入解析ThreadLocal类
先了解一下ThreadLocal类提供的几个方法: public T get() { } public void set(T value) { } public void remove() { } p ...
