写在前面,首先,我用的java转json序列化的工具是java开源的jackson。
今天在做后端接口的时候,发现获取的json对象中少了几个属性,因为其他的接口都能得到正确的json,所以很快就找到了问题所在,先上代码
public class chargedto implements serializable { private static final long serialversionuid = -4617215025083571608l; protected integer cid; protected string item; protected double amount; protected integer vcid; @jsonformat(pattern = "yyyy-mm-dd hh:mm:ss") protected date createtime; protected string createename; }
{ "status": 200, "message": "成功", "data": [ { "createtime": "2020-05-04 01:41:19" }, { "createtime": "2020-05-04 02:10:11" }] }
是的,这里我的类中只有属性,没有getter、setter方法,所以获取的json中少了一些属性。
解决方法一:后来我将类中的所有属性加上了getter、setter方法之后得到了正确的json对象。
{ "status": 200, "message": "成功", "data": [ { "cid": 1, "item": "挂号", "createename": "医生1", "createtime": "2020-05-04 01:41:19", "amount": 5, "vcid": 1 }, { "cid": 2, "createtime": "2020-41-04 01:41:38", "item": "处方结算", "createename": "医生1", "createtime": "2020-05-04 02:10:11", "amount": 122, "vcid": 1 }] }
虽然很快解决了,但是我还是上网查了下原因,然后我查阅知晓对于我用的jackson来说,需要类中有getter方法。是的,虽然我一次性把setter方法也加上了,但是对于jackson将java对象转json来说,只要有getter方法就行了。甚至是不需要有属性!
注意:java对象转成json成立的基本条件只需要有get方法!!
然后我发现我一开始虽然丢失了几个属性,但是我也是有属性转为了json的,就是createtime。于是我就注意到了我在createtime属性上加的注解@jsonformat(pattern = "yyyy-mm-dd hh:mm:ss"),我想着是不是和这个注解有关,于是我将getter方法删去,在其他属性上加上了注解
public class chargedto implements serializable { private static final long serialversionuid = -4617215025083571608l; protected integer cid; protected string item; @jsonformat protected double amount; @jsonformat protected integer vcid; @jsonformat(pattern = "yyyy-mm-dd hh:mm:ss") protected date createtime; protected string createename; }
然后在json中成功都得到了该属性,
{ "status": 200, "message": "成功", "data": [ { "amount": 5, "vcid": 1, "createtime": "2020-04-04 01:41:19" }, { "amount": 122, "vcid": 1, "createtime": "2020-04-04 01:41:38" }] }
所以,解决方法二:在你需要转为json的属性上加上@jsonformat注解即可