簡體   English   中英

在Spring Boot Application中更改對象的默認json

[英]Changing default json for an object in Spring Boot Application

  • 我有一個簡單的Spring Boot應用程序,它有一個簡單的MyDateTime模型類,只有一個帶私有訪問權限的java.util.Date實例變量,getters / setter和默認構造函數。

  • 控制器只是實例化該對象並返回。

  • 在輸出中,我看到Date對象的默認表示是作為整數完成的(可能是來自Epoch的毫秒)

  • 有什么辦法可以將Date Object的默認jsonification更改為ISO-String或任何其他String嗎?

編輯:

一些澄清:

我是Spring和Spring Boot的新手。 我正在使用spring網站上的示例應用程序中的模板。 JSONification是通過Jackson完成的。 休息,我對Spring一般都不太了解。

您可以設置Jackson在application.properties文件中序列化日期時使用的默認格式:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#common-application-properties

您還可以使用@JsonFormat注釋指定要用於特定日期的特定格式,如下所示:

示例POJO:

public class Demo {
    private Date timestamp1;
    private Date timestamp2;
    public Date getTimestamp1() {
        return timestamp1;
    }
    public void setTimestamp1(Date timestamp1) {
        this.timestamp1 = timestamp1;
    }
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    public Date getTimestamp2() {
        return timestamp2;
    }
    public void setTimestamp2(Date timestamp2) {
        this.timestamp2 = timestamp2;
    }
}

示例控制器:

@RestController
public class DemoController {

    @RequestMapping(value="/demo", method = RequestMethod.GET)
    Demo start() {
        Demo demo = new Demo();
        Date timestamp = new Date();
        demo.setTimestamp1(timestamp);
        demo.setTimestamp2(timestamp);
        return demo; 
    }
}

https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations

Date.toString()方法默認返回紀元時間戳。 你想做的是關於傑克遜的內部。 要實現這一點,請將MyDateTime類更改為以下內容:

public class MyDateTime {
    private final Date date;

    public MyDateTime(Date date) {
        this.date = date;
    }

    public Date date() {   //this is not read by Jackson
        return date;
    }

    public String getDate() {   //this is read by Jackson
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        return formatter.format(date);
    }

}

在序列化時,傑克遜尋找getter方法,以get開頭的方法。 如果您不想序列化某些內容,請從名稱中刪除get 這是最簡單的解決方案,您可以檢查Jackson API for @JsonIgnore注釋以獲得更多解決方案。 如果要在JSON字符串中的字段名稱中查看其他date ,請查找@JsonProperty

要打印人類可讀日期,您需要SimpleDateFormat 這些示例在我的設置上運行正常,除了從HelloController返回自定義類之外,我沒有做任何其他事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM