- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringBoot基于HttpMessageConverter实现全局日期格式化由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
还在为日期格式化的问题头痛?赶紧阅览文章寻找答案吧! 。
学习目标 。
快速学会使用jackson消息转换器并实现日期的全局格式化.
快速查阅 。
源码下载:springboot-date-format 。
开始教程 。
1、全局日期格式化(基于自动配置) 。
关于日期格式化,很多人会想到使用jackson的自动配置:
1
2
|
spring.jackson.date-format=yyyy-mm-dd hh:mm:ss
spring.jackson.timezone: gmt+
8
|
这种全局日期格式化固然方便,但在消息传递时只能解析特定的时间格式,在实际业务开展中并不那么方便。例如某接口返回的是long类型的时间戳,显然此时消息转换器将抛出解析失败的异常.
那么有没更好的办法,既支持返回默认的日期格式,又支持解析复杂的日期字符串?
答案是有的,只需要重写jackson的消息转换器来支持解析复杂的日期格式即可.
2、全局日期格式化(基于消息转换器) 。
首先在项目引入jackson、thymeleaf等相关依赖: 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<dependency><!--web相关依赖-->
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
<dependency><!--thymeleaf依赖-->
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-thymeleaf</artifactid>
</dependency>
<dependency><!--json 解析工具类-->
<groupid>com.fasterxml.jackson.core</groupid>
<artifactid>jackson-databind</artifactid>
</dependency>
<dependency><!--xml 解析工具类-->
<groupid>com.fasterxml.jackson.dataformat</groupid>
<artifactid>jackson-dataformat-xml</artifactid>
<optional>
true
</optional>
</dependency>
|
然后根据 simpledateformat 来定制支持复杂日期类型解析的工具类.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
private
simpledateformat dateformat =
new
simpledateformat(
"yyyy-mm-dd hh:mm:ss"
) {
//根据实际业务支持各种复杂格式的日期字符串。
@override
public
date parse(string source) {
try
{
return
super
.parse(source);
//支持解析指定pattern类型。
}
catch
(exception e) {
try
{
return
new
stddateformat().parse(source);
//支持解析long类型的时间戳
}
catch
(parseexception e1) {
throw
new
runtimeexception(
"日期格式非法:"
+ e);
}
}
}
};
|
紧接着根据使用场景,来介绍如何快速实现日期的格式化.
关于日期时间格式化的三种使用场景 。
(1)使用@responsebody返回json信息会用到mappingjackson2httpmessageconverter .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@bean
public
mappingjackson2httpmessageconverter mappingjackson2httpmessageconverter() {
mappingjackson2httpmessageconverter jsonconverter =
new
mappingjackson2httpmessageconverter();
//设置解析json工具类
objectmapper objectmapper =
new
objectmapper();
//设置解析日期的工具类
objectmapper.setdateformat(dateformat);
//忽略未知属性 防止解析报错
objectmapper.configure(deserializationfeature.fail_on_unknown_properties,
false
);
jsonconverter.setobjectmapper(objectmapper);
list<mediatype> list =
new
arraylist<>();
list.add(mediatype.application_json_utf8);
jsonconverter.setsupportedmediatypes(list);
return
jsonconverter;
}
|
(2)使用@responsebody返回xml信息会用到mappingjackson2xmlhttpmessageconverter.
1
2
3
4
5
6
7
8
9
10
11
12
|
@bean
public
mappingjackson2xmlhttpmessageconverter mappingjackson2xmlhttpmessageconverter() {
mappingjackson2xmlhttpmessageconverter xmlconverter =
new
mappingjackson2xmlhttpmessageconverter();
//设置解析xml的工具类
xmlmapper xmlmapper =
new
xmlmapper();
//设置解析日期的工具类
xmlmapper.setdateformat(dateformat);
//忽略未知属性 防止解析报错
xmlmapper.configure(deserializationfeature.fail_on_unknown_properties,
false
);
xmlconverter.setobjectmapper(xmlmapper);
return
xmlconverter;
}
|
(3)使用modelandview返回html页面信息.
值得注意的是,无论上面哪种消息转换器均无法满足页面日期的全局格式化,因为th:object默认调用的日期date的tostring方法,所以在thymemleaf页面对日期格式化需要借助工具类#dates.
例如:<input th:value="*{#dates.format(createtime,'yyyy-mm-dd hh:mm:ss')}"> 。
3、测试日期格式化 。
推荐大家下载源码对照撸一遍,实践是检验真理的唯一标准.
java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/**
* 用户管理
*/
@restcontroller
public
class
usercontroller {
/**
* 打开主页
*/
@getmapping
(
"/"
)
public
modelandview index() {
modelandview mv =
new
modelandview(
"user/user"
);
mv.addobject(
"user"
,
new
user(
"1"
,
"admin"
,
"123456"
,
new
date()));
return
mv;
}
/**
* 自动根据请求来判断返回用户json或xml
*/
@getmapping
(
"/user"
)
public
user get() {
return
new
user(
"1"
,
"admin"
,
"123456"
,
new
date());
}
/**
* 返回用户json
*/
@getmapping
(value =
"/user/json"
, produces = mediatype.application_json_utf8_value)
public
user getjson() {
return
new
user(
"1"
,
"admin"
,
"123456"
,
new
date());
}
/**
* 返回用户xml
*/
@getmapping
(value =
"/user/xml"
, produces = mediatype.application_xml_value)
public
user getxml() {
return
new
user(
"1"
,
"admin"
,
"123456"
,
new
date());
}
}
|
页面代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<!doctype html>
<html xmlns:th=
"http://www.thymeleaf.org"
>
<head>
<meta charset=
"utf-8"
>
<title>日期格式化</title>
</head>
<body>
<h3><a th:href=
"@{/}"
rel=
"external nofollow"
>
1
.在页面中对日期格式化</a></h3>
<form th:object=
"${user}"
>
<input th:value=
"*{userid}"
type=
"hidden"
>
账号:<input th:value=
"*{username}"
>
密码:<input th:value=
"*{password}"
type=
"password"
>
时间:<input th:value=
"*{createtime}"
type=
"text"
>
</form>
<form th:object=
"${user}"
>
账号:<input th:value=
"*{username}"
>
密码:<input th:value=
"*{password}"
type=
"password"
>
时间:<input th:value=
"*{#dates.format(createtime,'yyyy-mm-dd hh:mm:ss')}"
>
</form>
<h3><a th:href=
"@{/user/json}"
rel=
"external nofollow"
>
2
.点击获取json信息</a></h3>
<h3><a th:href=
"@{/user/xml}"
rel=
"external nofollow"
>
3
.点击获取xml信息</a></h3>
</body>
</html>
|
启动项目后访问 http://localhost:8080 查看日期格式化效果:
4、小结 。
1、使用@responsebody会根据请求头信息来智能选择json/xml消息转换器。 2、通过重写httpmessageconverter可以自定义消息转换器来实现全局日期格式化。 3、采用类似yyyy-mm-dd hh:mm:ss的日期格式更符合国人的阅读习惯,能够提升用户体验.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.jianshu.com/p/7f8e1c817958 。
最后此篇关于SpringBoot基于HttpMessageConverter实现全局日期格式化的文章就讲到这里了,如果你想了解更多关于SpringBoot基于HttpMessageConverter实现全局日期格式化的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!