在Java應用程序開發中,可能需要將Date對象轉換成JSON格式的數據。但是在轉換過程中,可能會遇到一個問題:Date對象被轉換為了長整型(long)。
例如,下面是一個將Date對象轉換成JSON格式的示例代碼: import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Date; public class Test { public static void main(String[] args) throws Exception { Date date = new Date(); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(date); System.out.println(json); } } 輸出結果為: 1574755899361 可以看到,Date對象被轉換成了長整型(long)。
那么我們該如何避免Date被轉換成long呢?
一種解決方法是使用@JsonFormat注解,如下示例代碼:
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Date; public class Test { public static void main(String[] args) throws Exception { Date date = new Date(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); String json = objectMapper.writeValueAsString(date); System.out.println(json); } } 輸出結果為: "2019-11-26 15:25:57" 可以看到,Date對象被轉換成了字符串類型。
另外一種解決方法是使用@JsonSerialize注解,如下示例代碼:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Date; public class Test { public static void main(String[] args) throws Exception { Date date = new Date(); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(new DateVO(date)); System.out.println(json); } static class DateVO { @JsonSerialize(using = DateSerializer.class) private Date date; public DateVO(Date date) { this.date = date; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } static class DateSerializer extends JsonSerializer{ @Override public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = dateFormat.format(date); jsonGenerator.writeString(dateString); } } } 輸出結果為: "2019-11-26 15:38:21" 可以看到,Date對象被轉換成了字符串類型。
總的來說,我們可以通過@JsonFormat注解或@JsonSerialize注解來自定義Date對象的JSON格式,避免出現Date對象被轉換為long的情況。
上一篇date轉json
下一篇vue ajax路由跳轉