有时在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
相关文章:
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
建站之星如何取消后台验证码生成?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何在自有机房高效搭建专业网站?
如何选择域名并搭建高效网站?
内部网站制作流程,如何建立公司内部网站?
广州建站公司哪家好?十大优质服务商推荐
实现虚拟支付需哪些建站技术支撑?
深圳网站制作平台,深圳市做网站好的公司有哪些?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
建站之星导航配置指南:自助建站与SEO优化全解析
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
宝塔新建站点报错如何解决?
如何用5美元大硬盘VPS安全高效搭建个人网站?
个人网站制作流程图片大全,个人网站如何注销?
建站之星如何修改网站生成路径?
文字头像制作网站推荐软件,醒图能自动配文字吗?
海南网站制作公司有哪些,海口网是哪家的?
网站制作软件有哪些,制图软件有哪些?
如何获取上海专业网站定制建站电话?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
七夕网站制作视频,七夕大促活动怎么报名?
建站主机数据库如何配置才能提升网站性能?
建站之星代理如何优化在线客服效率?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何快速搭建二级域名独立网站?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
小型网站制作HTML,*游戏网站怎么搭建?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何选择美橙互联多站合一建站方案?
如何在阿里云购买域名并搭建网站?
如何获取开源自助建站系统免费下载链接?
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何在Golang中使用replace替换模块_指定本地或远程路径
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何通过老薛主机一键快速建站?
历史网站制作软件,华为如何找回被删除的网站?
建站之星如何快速解决建站难题?
建站之星导航菜单设置与功能模块配置全攻略
如何快速搭建高效WAP手机网站?
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何用虚拟主机快速搭建网站?详细步骤解析
小型网站建站如何选择虚拟主机?
代刷网站制作软件,别人代刷火车票靠谱吗?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何在Tomcat中配置并部署网站项目?
*请认真填写需求信息,我们会在24小时内与您取得联系。