SpringBoot利用jackson格式化时间的三种方法

前言

在实际开发中我们经常会与时间打交道,那这就会涉及到一个时间格式转换的问题。接下来会介绍几种在SpirngBoot中如何对时间格式进行转换。

准备工作

创建项目,添加依赖

<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

编写控制层代码

@RestController
public 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;

@Configuration
public 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;
@Bean
ObjectMapper 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:mm
spring.jackson.time-zone=GMT+8

如果第二种方式和第三种方式配置同时存在,以第二种方式为主。

如果三种方式都存在的时候,以实体类中注解格式为主。

总结

到此这篇关于SpringBoot利用jackson格式化时间的文章就介绍到这了,更多相关SpringBoot jackson格式化时间内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot项目中jackson-序列化-处理 NULL教程

    在项目中有事需要对值为NULL的对象中Field不做序列化输入配置方式如下: [配置类型]: 源码包中的枚举类: public static enum Include { ALWAYS, NON_NULL, NON_ABSENT, NON_EMPTY, NON_DEFAULT, USE_DEFAULTS; private Include() { } } Include.Include.ALWAYS 默认 Include.NON_DEFAULT 属性为默认值不序列化 Include.NON_EMP

  • Springboot中如何使用Jackson

    1.SpringMVC中默认集成 SpringMVC已经默认集成了JackSon,如下所示: @RequestMapping("/addUserInfo") public UserInfo addUserInfo(@RequestBody UserInfo userInfo){ } 可以用UserInfo对象来接前台传过来的json,SpringMVC已经帮我们自动反序列化. 可以看到,在SpringBoot中,只需要导入web starter,不需要添加其他的依赖,就可以使用Jack

  • SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

    网上杂七杂八的说法不一,大多数都是抄来抄去,没有实践,近期在项目频繁遇到boot+jackson处理日期的问题,故开此贴. 首先是POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

  • Spring boot中Jackson的操作指南

    前言 有一段时间没写博客了,虽然是菜鸟一枚但毕竟总要有东西记录学习的,我相信有志者事竟成.今天在工作中使用Jackson转换了一个javabean,传到测试服上之后发现日期少了一天,使用的是@JsonFormat注解. Spring-Boot是基于Spring框架的,它并不是对Spring框架的功能增强,而是对Spring的一种快速构建的方式. 好了,下面话不多说了,来一起看看详细的介绍吧 这里写了一个简单的小demo记录一下: 表数据: 实体类属性: controller层就省略掉了,就是调用

  • 详解springboot之jackson的两种配置方式

    springboot 针对jackson是自动化配置的,如果需要修改,有两种方式: 方式一:通过application.yml 配置属性说明:## spring.jackson.date-format指定日期格式,比如yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名 spring.jackson.deserialization是否开启Jackson的反序列化 spring.jackson.generator是否开启json的generators. spring.jackson

  • SpringBoot利用jackson格式化时间的三种方法

    前言 在实际开发中我们经常会与时间打交道,那这就会涉及到一个时间格式转换的问题.接下来会介绍几种在SpirngBoot中如何对时间格式进行转换. 准备工作 创建项目,添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 创建实体类UserDT

  • Java 获取当前系统时间的三种方法

    准备工作: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; 方式一: /**  * 获取系统当前时间之方式一  * @explain 使用Calendar实现  * @param format  * @return  */ public static String getSysdateStr(String format) {     Date sysdate = Calend

  • java 获取当前时间的三种方法

    总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响,得到的结果是时间戳格式的.例如: 1543105352845 我们可以将时间戳转化成我们易于理解的格式 SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); Date date = n

  • JS格式化时间的几种方法总结

    方法一 方法 //格式化时间 function format(dat){ //获取年月日,时间 var year = dat.getFullYear(); var mon = (dat.getMonth()+1) < 10 ? "0"+(dat.getMonth()+1) : dat.getMonth()+1; var data = dat.getDate() < 10 ? "0"+(dat.getDate()) : dat.getDate(); var

  • springboot集成本地缓存Caffeine的三种使用方式(小结)

    目录 第一种方式(只使用Caffeine) 第二种方式(使用Caffeine和spring cache) 第三种方式(使用Caffeine和spring cache) 第一种方式(只使用Caffeine) gradle添加依赖 dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-s

  • 详解springboot解决CORS跨域的三种方式

    目录 一.实现WebMvcConfigurer接口 二.实现filter过滤器方式 三.注解@CrossOrigin 四.实战 五.cookie的跨域 一.实现WebMvcConfigurer接口 @Configuration public class WebConfig implements WebMvcConfigurer { /** * 添加跨域支持 */ @Override public void addCorsMappings(CorsRegistry registry) { // 允

  • vue中el-table格式化el-table-column内容的三种方法

    目录 el-table格式化el-table-column内容 一.template scope .v-if判断 二.利用formatter.slot属性 三.但这些对我当前的情况,并不适用.所以,后来发现一个好方法.将两种方法结合起来,使用slot,自定义 formatter.(自定义)灵活应用就好啦 博文参考: el-table格式化el-table-column内容 遇到一个需求,一个循环展示的table中的某项,或者某几项需要格式化.对于格式化的方法,主要有template scope.

  • SpringBoot实现定时发送邮件的三种方法案例详解

    目录 一.发送邮件的三种方法 二.定时任务介绍 1.@EnableScheduling 2.@Scheduled 三.前期准备工作 1.登录QQ邮箱获取授权码 第一步:进入QQ邮箱 第二步:找到POP3/SMTP,并开启 第三步:复制授权码 2.pom.xml中的依赖 3.在全局配置文件application.properties添加邮件服务配置 四.操作 一.创建邮件发送任务管理的业务处理类SendEmailService 二.在test类中发送邮件 三.发送定时邮件 四.在项目启动类上添加基

  • Springboot处理CORS跨域请求的三种方法

    前言 Springboot跨域问题,是当前主流web开发人员都绕不开的难题.但我们首先要明确以下几点 跨域只存在于浏览器端,不存在于安卓/ios/Node.js/python/ java等其它环境 跨域请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了. 之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议.域名.端口号都完全一致. 浏览器出于安全的考虑,使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略,否则就是跨域的H

  • 利用原生JS实现懒加载lazyLoad的三种方法总结

    目录 前言 Method 1: 高度对比 Method 2: 使用getBoundingClientRect() 的API Method 3: 采用最新的 IntersectionObserver 构造函数 总结 前言 首先我们先搭建好页面如下: <style> * { padding: 0%; margin: 0%; } .contain img { width: 600px; height: 400px; } ul { list-style: none; } li { display: i

随机推荐