Spring Boot 配置引发 时区问题,接口返回日期莫名其妙-1天?

Spring Boot 配置引发 时区问题,接口返回日期莫名其妙-1天?

如果像这篇文章(https://www.cnblogs.com/zolmk/p/16452157.html) 一样配置 MessageConverter 会引发一个莫名其妙的时区问题,如:接口返回日期被-1天。
修改方式如下,我们需要显式的去设置时区,并且推荐使用下面的方式来注册 MessageConverter:

package com.fy.aspact;

import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.math.BigDecimal;
import java.util.List;
import java.util.TimeZone;

/**
 * Jackson的全局配置
 * @author zhuff 2022/7/2
 **/
@Configuration
public class GlobalJacksonConfiguration implements WebMvcConfigurer {


    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        SimpleModule module = new SimpleModule();

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

        module.addDeserializer(BigDecimal.class, new BigDecimalDeserializer());
        module.addSerializer(BigDecimal.class,new BigDecimalSerializer());

        converter.getObjectMapper().registerModule(module);
        
        // 显式设置时区
        converter.getObjectMapper().setTimeZone(TimeZone.getDefault());
        
        // 此处必须添加到第一个,不然不起作用
        converters.add(0, converter);
    }
}
posted @ 2022-08-17 21:37  zolmk  阅读(308)  评论(0编辑  收藏  举报