1. 程式人生 > 程式設計 >Java物件轉json JsonFormat註解

Java物件轉json JsonFormat註解

寫在前面,首先,我用的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,"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": "處方結算","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,"data": [
  {
   "Amount": 5,"Vcid": 1,"CreateTime": "2020-04-04 01:41:19"
  },{
   "Amount": 122,"CreateTime": "2020-04-04 01:41:38"
  }]
}

所以,解決方法二:在你需要轉為json的屬性上加上@JsonFormat註解即可

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。