[英]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
您還可以使用@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.