日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

在SpringMVC中使用Jackson并格式化时间

發(fā)布時(shí)間:2025/5/22 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在SpringMVC中使用Jackson并格式化时间 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在spring?MVC 3中,要實(shí)現(xiàn)REST風(fēng)格的JSON服務(wù),最簡單的方式是使用?@ResponseBody?注解。該注解會(huì)自動(dòng)把返回的對(duì)象,序列化為JSON。

來看一個(gè)最簡單的例子。這個(gè)例子先使用Spring 3.0.5 + Jackson1.7.1。Jackson是Spring使用的JSON序列化/反序列化第三方庫。

pom.xml 的主要內(nèi)容如下

<!-- Spring Framework Dependencies --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.0.5.RELEASE</version> </dependency> <!-- jackson json --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.7.1</version> </dependency>

再定義了一個(gè) POJO 對(duì)象 TestParams,由Controller的doTestQuery方法中返回該對(duì)象。

public class TestParams { private Date formatTime; private Date originTime; private int i; public Date getFormatTime() { return formatTime; } public Date getOriginTime() { return originTime; } public int getI() { return i; } public void setFormatTime(Date formatTime) { this.formatTime = formatTime; } public void setOriginTime(Date originTime) { this.originTime = originTime; } public void setI(int i) { this.i = i; } } @ResponseBody @RequestMapping(value="/test", method=RequestMethod.GET) public Object doTestQuery() { TestParams params = new TestParams(); params = new TestParams(); Date now = new Date(); params.setFormatTime(now); params.setOriginTime(now); return params; }

請(qǐng)求示例URL ,瀏覽器返回

{"formatTime": 1412509897631, "originTime": 1412509897631, "i": 0 }

并且返回的報(bào)文內(nèi)容類型也是妥妥的:?Content-Type:application/json;charset=UTF-8

只是時(shí)間看起來挺別扭。

默認(rèn)情況下Jackson將?Java.util.Date?序列化為?epoch timestamp,并且時(shí)區(qū)使用的是?GMT標(biāo)準(zhǔn)時(shí)間,而非本地時(shí)區(qū)。

“因?yàn)檫@樣最有效且準(zhǔn)確”。

Why do Dates get written as numbers?

Default serializer for java.util.Date (and related, such as java.util.Calendar) serialize them using the most efficient accurate representation, so-called epoch timestamp (number of milliseconds since January 1st, 1970, UTC). Assumption is that if user does not care, we should use efficient and accurate representation to get job bdone

如果你開發(fā)過跨大洲跨時(shí)區(qū)的web站點(diǎn),就會(huì)知道上面的話是實(shí)踐出真知。

那么當(dāng)我想要一個(gè)可讀性良好的時(shí)間格式,該怎么做呢?

在Jackson1.x時(shí)代,可以擴(kuò)展?JsonSerializer,來實(shí)現(xiàn)一個(gè)格式化時(shí)間的JsonDateSerializer,并在注解中引用這個(gè)類

@JsonSerialize(using=JsonDateSerializer.class) public Date getDate() { return date; }

具體可以參見《How to Serialize Java.util.Date with Jackson JSON Processor / Spring 3.0》。

這種方法讓人愛不起來,又弱又麻煩的感覺。

進(jìn)一步查詢,發(fā)現(xiàn)有一個(gè)注解?@JsonFormat?可以方便的格式化時(shí)間字段。

但這個(gè)注解看了下只在 Jackson2 才有。于是我陷入了Spring 版本和Jackson2的迷思中,一番折騰。

如果不想使用?@JsonFormat?注解,jackson-mapper-asl仍然可以使用1.x的版本,來搭配 Spring 3.x系列。

如果想使用?@JsonFormat?注解,需要將Spring升級(jí)到?3.1.2?以上。
并且要將Jackson的jar包更換為2.x系列的(和1.x系列相比,包名都換了)。

升級(jí)后的pom.xml如下:

<!-- Spring Framework Dependencies --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework<groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.2.3</version> </dependency>

這時(shí)候可以在 TestParams 愉快地加上注解

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date formatTime;

再次訪問測(cè)試URL,返回JSON對(duì)象如下

{"formatTime": "2014-10-05 20:20:15", "originTime": 1412511615062, "i": 0 }

本文轉(zhuǎn)自二郎三郎博客園博客,原文鏈接:http://www.cnblogs.com/haore147/p/7212594.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的在SpringMVC中使用Jackson并格式化时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。