首页 > 其他分享 >Springboot 全局日期时间格式处理

Springboot 全局日期时间格式处理

时间:2024-01-11 15:37:31浏览次数:35  
标签:Springboot FORMAT DEFAULT TIME new 格式 全局 public objectMapper

    1. GET请求及POST表单请求(RequestParam和PathVariable参数):
  • -- 配置Converter<String, T>转换器实现参数转换, 该转换器bean会注入到spring mvc的参数解析器中(ParameterConversionService)
    1. POST-application/json请求(RequestBody参数)
  • -- 配置ObjectMapper(这个玩意儿会注入到Jackson的HttpMessagConverter里面,即MappingJackson2HttpMessageConverter中)来实现Json格式数据的序列化和反序列化
@Configuration
public class DateHandlerConfig {

    /**
     * 默认日期时间格式
     */
    private static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /**
     * 默认日期格式
     */
    private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    /**
     * 默认时间格式
     */
    private static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    /**
     * Date转换器
     * 采用hutool的日期解析工具类Dateutil可以匹配任意格式日期字符串
     */
    @Bean
    public Converter<String, Date> dateConverter() {
        return new Converter<String, Date>() {
            @Override
            public Date convert(String source) {
                return DateUtil.parse(source.trim());
            }
        };
    }

    /**
     * LocalDate转换器
     */
    @Bean
    public Converter<String, LocalDate> localDateConverter() {
        return new Converter<String, LocalDate>() {
            @Override
            public LocalDate convert(String source) {
                return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
            }
        };
    }

    /**
     * LocalTime转换器
     */
    @Bean
    public Converter<String, LocalTime> localTimeConverter() {
        return new Converter<String, LocalTime>() {
            @Override
            public LocalTime convert(String source) {
                return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
            }
        };
    }

    /**
     * LocalDateTime转换器
     */
    @Bean
    public Converter<String, LocalDateTime> localDateTimeConverter() {
        return new Converter<String, LocalDateTime>() {
            @Override
            public LocalDateTime convert(String source) {
                return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT));
            }
        };
    }

    /**
     * Json序列化和反序列化转换器
     */
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();

        //java8日期 Local系列序列化和反序列化模块
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
        javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
        javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
        javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
        javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        objectMapper.registerModule(new ParameterNamesModule()).registerModule(new Jdk8Module()).registerModule(javaTimeModule);

        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
        // 忽略json字符串中不识别的属性
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // 忽略无法转换的对象
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        // PrettyPrinter 格式化输出
        objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        // NULL不参与序列化
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        // 指定时区
        objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
        /**
         * Date日期类型字符串全局处理, 默认格式为:yyyy-MM-dd HH:mm:ss
         * 局部处理某个Date属性字段接收或返回日期格式yyyy-MM-dd, 可采用@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")注解标注该属性
         */
        objectMapper.setDateFormat(new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT));

        return objectMapper;
    }

}

标签:Springboot,FORMAT,DEFAULT,TIME,new,格式,全局,public,objectMapper
From: https://www.cnblogs.com/smallcupforke/p/17958659

相关文章

  • SpringBoot中使用SpringEvent业务解耦神器实现监听发布事件同步异步执行任务
    场景SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135504554设计模式-观察者模式在Java中的使用示例-环境监测系统:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det......
  • springBoot自定义拦截器
    编写FuelH5InterceptorConfig配置类packagecom.fuel.framework.config;importcom.fuel.framework.interceptor.FuelH5Interceptor;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.Configuration;importorg......
  • SpringBoot3.x升级整合各依赖
    开发环境开发依赖版本openJDK17SpringBoot3.2.1以下是SpringBoot3.x版本依赖坐标发生变化的常用框架一、整合MybatisPlusSpringBoot2.x版本引入的依赖是:<mybatis.plus.version>3.4.2</mybatis.plus.version><dependency><groupId>com.baomidou</gro......
  • Springboot 项目集成 PageOffice V6 最简单代码
    本文描述了PageOffice产品在Springboot项目中如何集成调用。(本示例使用了Thymeleaf模板引擎)新建Springboot项目:pageoffice6-springboot2-simple在您项目的pom.xml中通过下面的代码引入PageOffice依赖。pageoffice.jar已发布到Maven中央仓库(opensnewwindow),建议使用最新......
  • SpringBoot配置加载优先级
    优先级:命令行参数>环境变量>配置文件1.命令行参数配置java-jar-Dserver.port=8000ruoyi-admin.jar2.环境变量配置linux系统环境:#申明环境变量exportSERVER_PORT=10000#执行jar包java-jardemo.jarwindow系统环境:idea中:java-jar命令使用环境变量需要再win系统环境变量中......
  • 计算机图形:全局光照
    目录什么是全局光照光线跟踪方法基本光线跟踪算法光线与对象表面的求交计算光线-球面求交光线-多面体求交减少求交计算的方法包围盒方法空间分割方法模拟相机的聚焦效果光线跟踪反走样分布式光线跟踪小结什么是全局光照前面的计算机图形:光照模型讲的是局部光照,通过对象表面和光......
  • SpringBoot-Mybatis整合
     创建数据库CREATETABLE`user`( `id`int(11)NOTNULLAUTO_INCREMENTcomment'学号', `name`varchar(20)DEFAULTNULL, `pwd`int(11)DEFAULTNULL, PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=18DEFAULTCHARSET=utf8;创建一个springboo......
  • Springboot 扩展点
    1.ApplicationContextInitializerorg.springframework.context.ApplicationContextInitializer这是整个spring容器在刷新之前初始化ConfigurableApplicationContext的回调接口,简单来说,就是在容器刷新之前调用此类的initialize方法。这个点允许被用户自己扩展。用户可以在......
  • SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662设计模式-单例模式-饿汉式单例模式、懒汉式单例模式、静态内部类在Java中的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/......
  • 网工们,这11种协议报文格式一定要烂熟于心!
    01、TCP1、源端口号和目的端口号:用16bit表示所以端口号范围为0~65535,用来标识源主机和目的主机上的进程,用于运输层的多路复用和多路分解。2、序号:用于TCP重发时区分是第一次发送还是重发的TCP段,还可以在一次连接的范围防止重放攻击,不重数可以在很久时间防止重放攻击。3、重放攻击......