有时在Spring MVC中返回JSON格式的response的时候会使用@ResponseBody注解,不过在处理java8中时间的时候会很麻烦,一般我们使用的HTTPMessageConverter是MappingJackson2HttpMessageConverter,它默认返回的时间格式是这种:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
但是我们不会返回这种给前端使用,针对LocalDate想要返回的格式是2016-11-26,而LocalDateTime想要返回的格式是2016-11-26 21:04:34这样的数据。通过项目研究并查阅相关资料,这里介绍下个人研究中实现的两种方式。
解决方法一:
若是maven项目,在pom中引入下面的jar包:
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.8.5</version> </dependency>
然后在你想要JSON化的POJO字段的get函数上加上一个@JsonSerializer注解,如下
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
public LocalDateTime getBirthday() {
return this.loginTime;
}
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
public LocalDateTime getLastLoginTime() {
return this.loginTime;
}
这种方式的优点是可以针对具体域类型设置不同显示方式,然而优点也是缺点,因为每个日期属性都要手动添加,实际中日期属性又是普遍必备,并且需要额外引入jsr310的jar包。
解决方法二:
继承ObjectMapper来实现返回json字符串。MappingJackson2HttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们编写一个JsonUtil类,获取ObjectMapper以针对java8中新的日期时间API,注册相应的JsonSerializer<T>。
/**
* json处理工具类
*
*
*/
@Component
public class JsonUtil {
private static final ObjectMapper mapper;
public ObjectMapper getMapper() {
return mapper;
}
static {
mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(LocalDate.class, new LocalDateSerializer());
module.addSerializer(LocalTime.class, new LocalTimeSerializer());
module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
mapper.registerModule(module);
}
public static String toJson(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (Exception e) {
throw new RuntimeException("转换json字符失败!");
}
}
public <T> T toObject(String json, Class<T> clazz) {
try {
return mapper.readValue(json, clazz);
} catch (IOException e) {
throw new RuntimeException("将json字符转换为对象时失败!");
}
}
}
class LocalDateSerializer extends JsonSerializer<LocalDate> {
private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public void serialize(LocalDate value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeString(dateFormatter.format(value));
}
}
class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public void serialize(LocalDateTime value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeString(dateTimeFormatter.format(value));
}
}
class LocalTimeSerializer extends JsonSerializer<LocalTime> {
private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
@Override
public void serialize(LocalTime value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeString(timeFormatter.format(value));
}
}
然后在springmvc的配置文件中,再将<mvc:annotation-driven/>改为以下配置,配置一个新的json转换器,将它的ObjectMapper对象设置为JsonUtil中的objectMapper对象,此转换器比spring内置的json转换器优先级更高,所以与json有关的转换,spring会优先使用它。
<mvc:annotation-driven>
<mvc:message-converters>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" value="#{jsonUtil.mapper}" />
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
然后java8中的几种日期和时间类型就可以正常友好的显示了。优点是全局统一管理日期和时间等类型,缺点对pojo中的某个域做特殊处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# mvc日期格式化
# springmvc
# 时间格式化
# json
# date
# SpringBoot利用jackson格式化时间的三种方法
# springboot2.0 配置时间格式化不生效问题的解决
# 关于Springboot日期时间格式化处理方式总结
# springboot json时间格式化处理的方法
# springmvc fastjson 反序列化时间格式化方法(推荐)
# spring中时间格式化的两种方法示例讲解
# 来实现
# 解决方法
# 又是
# 都要
# 两种
# 更高
# 几种
# 相关资料
# 会很
# 设置为
# 转换为
# 再将
# 你想要
# 配置文件
# 大家多多
# 上加
# 就可以
# 中新
# 使用它
# fasterxml
相关文章:
大连网站设计制作招聘信息,大连投诉网站有哪些?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
开源网站制作软件,开源网站什么意思?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何确保西部建站助手FTP传输的安全性?
如何用景安虚拟主机手机版绑定域名建站?
如何在云主机上快速搭建网站?
如何在阿里云高效完成企业建站全流程?
专业网站建设制作报价,网页设计制作要考什么证?
安云自助建站系统如何快速提升SEO排名?
网站设计制作企业有哪些,抖音官网主页怎么设置?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星如何实现PC+手机+微信网站五合一建站?
如何彻底删除建站之星生成的Banner?
如何用低价快速搭建高质量网站?
如何在服务器上配置二级域名建站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
定制建站如何定义?其核心优势是什么?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
建站之星备案是否影响网站上线时间?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
建站之星如何通过成品分离优化网站效率?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何在新浪SAE免费搭建个人博客?
如何配置IIS站点权限与局域网访问?
如何选择美橙互联多站合一建站方案?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Swift中switch语句区间和元组模式匹配
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
家具网站制作软件,家具厂怎么跑业务?
Python路径拼接规范_跨平台处理说明【指导】
宝塔面板如何快速创建新站点?
大型企业网站制作流程,做网站需要注册公司吗?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Android自定义控件实现温度旋转按钮效果
临沂网站制作企业,临沂第三中学官方网站?
如何在香港免费服务器上快速搭建网站?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何在阿里云通过域名搭建网站?
大连网站制作公司哪家好一点,大连买房网站哪个好?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
*请认真填写需求信息,我们会在24小时内与您取得联系。