java對象轉json JsonFormat注解 get方法


寫在前面,首先,我用的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 jar序列化與set,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注解即可

這其中的具體原理我並沒有去深究,之后有時間再去看看具體源碼。如果有大佬都懂的話可以留言指導,或者留下博客鏈接,小弟必去造訪。


以上都是本人自己的理解,可能會與真正的解答不一致,歡迎各位大佬指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM