springboot2.0 配置时间格式化不生效问题的解决

在开发中日期最常打交道的东西之一,但是日期又会存在各式各样的格式,常见的情形就是,从数据库取出的日期往往都是时间戳(毫秒数)的形式,这个一般情况下是前端不想要的结果,需要进行处理,那在springboot中比较简单:

pom.xml中添加依赖

<!-- 日期格式化 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-rest</artifactId>
	<version>1.5.2.RELEASE</version>
</dependency>

要在application.properties进行如下配置:

#日期格式化
spring.jackson.date-format=yyyy-MM-dd
spring.jackson.time-zone=GMT+8
spring.jackson.serialization.write-dates-as-timestamps=false

注:

  • 第1行设置格式
  • 第2行设置时区
  • 第3行表示不返回时间戳,如果为 true 返回时间戳,如果这三行同时存在,以第3行为准即返回时间戳

但是,网上很多人照着做了还是有问题,照样不能格式化,为嘛?

这里大家注意,看看自己的代码有没有因为添加拦截器二创建了一个配置类,该类继承了WebMvcConfigurationSupport,就是他!以前是用 WebMvcConfigurerAdapter ,springboot 2.0 建议使用 WebMvcConfigurationSupport 。但是在添加拦截器并继承 WebMvcConfigurationSupport 后会覆盖@EnableAutoConfiguration关于WebMvcAutoConfiguration的配置!从而导致所有的Date返回都变成时间戳!

可以采用另外一种方式,在你继承WebMvcConfigurationSupport的子类中添加日期转换的bean

@Configuration
public class Configurer extends WebMvcConfigurationSupport{

	@Autowired
	HttpInterceptor httpInterceptor;

	//定义时间格式转换器
	@Bean
	public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
	  MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
	  ObjectMapper mapper = new ObjectMapper();
	  mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
	  mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
	  converter.setObjectMapper(mapper);
	  return converter;
	}

	//添加转换器
	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
	  //将我们定义的时间格式转换器添加到转换器列表中,
	  //这样jackson格式化时候但凡遇到Date类型就会转换成我们定义的格式
	  converters.add(jackson2HttpMessageConverter());
	}

	@Override
	protected void addInterceptors(InterceptorRegistry registry) {
		// TODO Auto-generated method stub
		registry.addInterceptor(httpInterceptor).addPathPatterns("/**");
		super.addInterceptors(registry);
	}
}

这样就可解决问题!

到此这篇关于springboot2.0 配置时间格式化不生效问题的解决的文章就介绍到这了,更多相关springboot2.0时间格式化不生效内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于Springboot日期时间格式化处理方式总结

    项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是SpringMVC收到参数后总报错,为了配置全局时间类型转换,尝试了如下处理方式. 注:本文基于Springboot2.x测试,如果无法生效可能是spring版本较低导致的.PS:如果你的Controller中的LocalDate类型的参数啥注解(RequestParam.PathVariable等)都没加,也是会出错的,因为默认情况下,解析这种参数是使用ModelAttributeMethodProcessor进行处理,而

  • springboot json时间格式化处理的方法

    application.properties中加入如下代码 springboot 默认使用 jackson 解析 json spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 如果个别实体需要使用其他格式的 pattern,在实体上加入注解即可 import org.springframework.format.annotation.DateTimeFormat; import com.fas

  • springboot2.0 配置时间格式化不生效问题的解决

    在开发中日期最常打交道的东西之一,但是日期又会存在各式各样的格式,常见的情形就是,从数据库取出的日期往往都是时间戳(毫秒数)的形式,这个一般情况下是前端不想要的结果,需要进行处理,那在springboot中比较简单: pom.xml中添加依赖 <!-- 日期格式化 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter

  • springboot2.0配置连接池(hikari、druid)的方法

    *******************如果你看到这一行,说明爬虫在本人还没有发布完成的时候就抓走了我的文章,导致内容不完整,请查看原文**************** springboot2.0之后,自带了一个号称全世界最快的连接池hikari,直接在配置文件里输入以下配置即可: # Hikari will use the above plus the following to setup connection pooling spring.datasource.type=com.zaxxer.

  • vue的代理配置pathRewrite重写不生效问题及解决

    目录 代理配置pathRewrite重写不生效 webpack代理---pathRewrite 代理到本地 代理配置pathRewrite重写不生效 本人遇到的情况在网上搜索时没有看到本人遇到的情况.     devServer: {         proxy: {             //代理匹配前缀2             '/api2': {                 target: 'http://localhost:5001',                 pathR

  • Springboot2.0配置JPA多数据源连接两个mysql数据库方式

    目录 1. 目录结构及配置 2. 配置文件 3. DataSourceConfigurer类 4. 主数据源配置 5. 从数据源配置 6.User实体类模板 7.dao层模板 8.service模板 9.IBaseService接口 1. 目录结构及配置 pom.xml(不要乱放太多,会引起jar冲突,亲身体验) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

  • 基于SpringBoot2.0默认使用Redis连接池的配置操作

    SpringBoot2.0默认采用Lettuce客户端来连接Redis服务端的 默认是不使用连接池的,只有配置 redis.lettuce.pool下的属性的时候才可以使用到redis连接池 redis: cluster: nodes: ${redis.host.cluster} password: ${redis.password} lettuce: shutdown-timeout: 100 # 关闭超时时间 pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制

  • Python datetime时间格式化去掉前导0

    Python时间格式化的时候,去掉前导0的: dt = datetime.now() print dt.strftime('%-H') #结果是: '4' 在format string的%与flag之间,添加一个"-"即可. 在Mac和Linux中试过可用,不确定是否可以移植.

  • SpringBoot2.3.0配置JPA的实现示例

    JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 依赖 spring-boot-starter-data-jdbc spring-boot-starter-data-jpa mysql-connector-java <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

  • springboot2.0.0配置多数据源出现jdbcUrl is required with driverClassName的错误

    在Spring Boot 2.0配置多数据源和Spring Boot 1.5.x之前,一些配置及用法多少有些不同,其中一个问题就是"jdbcUrl is required with driverClassName."的错误 解决办法: 在配置文件中使用spring.datasource.jdbc-url,而不是通常使用的spring.datasource.url spring: datasource: master: jdbc-url: jdbc:postgresql://192.16

  • SpringBoot2.0+阿里巴巴Sentinel动态限流实战(附源码)

    Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围).消息削峰填谷.集群流量控制.实时熔断下游不可用应用等. 完备的实时监控:Sentinel 同时提供实时的监控功能.您可以在控制台中看到接入应用的

随机推荐