您好,欢迎访问一九零五行业门户网

SpringBoot怎么利用jackson格式化时间

准备工作
创建项目,添加依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid></dependency>
创建实体类userdto
添加属性,get、set方法省略。
private string id;private string username;private date createtime;
创建usercontroller
编写控制层代码
@restcontrollerpublic class usercontroller {    @getmapping(/getuser)    public list<userdto> getuser() {        list<userdto> userlist = new arraylist<userdto>();        for (int i=1; i<=3; i++) {            userdto user = new userdto();            user.setcreatetime(new date());            user.setusername(gongj + i);            user.setid(j + i);            userlist.add(user);        }        return userlist;    }    }
调用接口:http://localhost:8080/getuser
该结果很显然不是我们所需要的,所以我们需要进行时间格式化一下。而且还有时区问题,我当前时间是晚上 22:44。
第一种 使用注解
在需要转换的字段上增加 @jsonformat注解,该注解是  jackson的,web 包集成了。
import com.fasterxml.jackson.annotation.jsonformat;private string id;private string username; @jsonformat(pattern = yyyy-mm-dd hh:mm:ss,timezone = gmt+8)private date createtime;
pattern:需要转换的时间日期的格式
timezone:时间设置为东八区,避免时间在转换中有误差
调用接口:http://localhost:8080/getuser
完成,但是这种也有不好的地方,如果我有一百个实体中都有 date类型,那就要在一百个实体加入注解。显得有点麻烦。
第二种 修改默认配置
所有的json生成都离不开相关的httpmessageconverters
springboot 默认使用 jackson,并对其默认做了配置。所以我们来修改一下。
全局搜索 jacksonhttpmessageconvertersconfiguration。idea快捷键:ctrl + shift + r
该类中有个方法mappingjackson2httpmessageconverter 就是用来处理json的。
@bean@conditionalonmissingbean( value = {mappingjackson2httpmessageconverter.class}, ignoredtype = {org.springframework.hateoas.server.mvc.typeconstrainedmappingjackson2httpmessageconverter, org.springframework.data.rest.webmvc.alps.alpsjsonhttpmessageconverter})mappingjackson2httpmessageconverter mappingjackson2httpmessageconverter(objectmapper objectmapper) { return new mappingjackson2httpmessageconverter(objectmapper);}
注意该方法上有两个注解,@bean 注解就不在介绍了。介绍一下 conditionalonmissingbean注解。
@conditionalonmissingbean :当给定的在bean不存在时,则实例化当前 bean。
打个比喻:你入职报到,你公司看你带了电脑,就让你使用你自己的电脑,如果你没带电脑,就让你使用公司的电脑。springboot 也是这样子做的,你不提供,就使用默认的。
新建myconfig
import java.text.simpledateformat;import org.springframework.context.annotation.bean;import org.springframework.context.annotation.configuration;import com.fasterxml.jackson.databind.objectmapper;@configurationpublic class myconfig {    @bean    mappingjackson2httpmessageconverter mappingjackson2httpmessageconverterconfiguration() {        mappingjackson2httpmessageconverter converter = new mappingjackson2httpmessageconverter();        objectmapper om = new objectmapper();        //全局修改josn时间格式        om.setdateformat(new simpledateformat(yyyy/mm/dd hh:mm:ss));        converter.setobjectmapper(om);        return converter;    }}
提供了一个 mappingjackson2httpmessageconverter的 bean ,所以springboot就会使用我们所提供的。
将user实体的注解注释
调用接口:http://localhost:8080/getuser
ok,这种方式也是可以的。
提供objectmapper
也可以提供一个 objectmapper,将上述提供的 mappingjackson2httpmessageconverter进行注释掉。
import java.text.simpledateformat;import org.springframework.context.annotation.bean;import org.springframework.context.annotation.configuration;import com.fasterxml.jackson.databind.objectmapper;@beanobjectmapper objectmapper() { objectmapper om = new objectmapper(); om.setdateformat(new simpledateformat(yyyy-mm-dd)); return om;}
调用接口:http://localhost:8080/getuser
注意:上述两种方法都是全局修改的哦!
第三种 配置文件修改
在 application.yml或者properties中修改默认配置
yml
spring:   jackson:     date-format: yyyy/mm/dd    timezone: gmt+8
properties
spring.jackson.date-format=yyyy-mm-dd hh:mmspring.jackson.time-zone=gmt+8
如果第二种方式和第三种方式配置同时存在,以第二种方式为主。
如果三种方式都存在的时候,以实体类中注解格式为主。
以上就是springboot怎么利用jackson格式化时间的详细内容。
其它类似信息

推荐信息