首页 > 其他分享 >用于日期转换的消息转换器

用于日期转换的消息转换器

时间:2024-04-26 22:11:38浏览次数:25  
标签:jackson FORMAT DEFAULT 日期 import 转换器 fasterxml com 转换

正常来讲,在项目中用到消息日期这类信息的时候,如果要按要求格式化,一般有两种方法

1. @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
  1. 在springboot的通常配置拦截器的WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式化处理(推荐)

第一步:设置相关依赖(负责json的)

        ```
       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
      ```

第二步,布置消息转换器这个工具类

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;

/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

第三步 拦截器重写的方法

@Override
  protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
      //创建一个消息转换器对象
      MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
     //需要为消息转换器设置一个对象转换器,对象转换器可以将java对象序列化为json数据
      converter.setObjectMapper(new JacksonObjectMapper());
      //添加消息转换器到拦截器,并通过序号提升优先级
      converters.add(0,converter);
  }

标签:jackson,FORMAT,DEFAULT,日期,import,转换器,fasterxml,com,转换
From: https://www.cnblogs.com/fubai/p/18160975

相关文章

  • 利用栈序列实现进制转换(D->H)
    /***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况修改顺序......
  • 获取天时分之间的时间间隔,返回天时分格式的日期,利用一天1440分钟
     写了老半天,还是电脑写的更简单,原来split还可以这么用,学到了。记录下//我写的publicstaticstringRetrieveSpanTimeByTime(stringfirstTime,stringendTime){intfirstDayIndex=firstTime.IndexOf("天");intendDayIndex=......
  • 从 Java 8 转换到 Java 11
    截至目前(2024年),十年前发布的Java8依然是Java中应用最广泛的版本,占比37%,其次是Java11。而目前的JDK最新版本为22,最新的LTS版本为JDK21。从Java8迁移到Java11可能意味着很大的工作量。潜在问题包括:删除的API、弃用的包、内部API的使用、对类加载程序的更......
  • 【python省时间】时间转换、日期格式化、时间戳转字符、
    1、日期格式化defpaserTime(timestamp):t=time.time()f=time.localtime(timestamp/1000)print(t)#原始时间数据#print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级时间戳#nowTime=lambda:int(round(t*......
  • 界面控件DevExpress Office File API中文教程 - 如何实现PDF转换?
    DevExpressOfficeFileAPI是一个专为C#,VB.NET和ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装MicrosoftOffice,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS,XLSx,DOC,DOCx,RTF,CSV和SnapReport等企业级文......
  • 使用顺序栈设计一个把十进制数转换为十六进制数的接口
    数据结构使用顺序栈设计一个把十进制数转换为十六进制数的接口笔试题:设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。/****************************************************......
  • 利用顺序栈进行进制转换程序
    数据结构顺序栈笔试题:设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。/***************************************************************************************file......
  • 进制转换
    /*****************************************************************name;DecimalToHexdecimal*function:进制转换*parameter;*ReValue;*author;小北blog*attention;*date;2024.04.25*history;*version;*Copyright(c)2024huahuadebaby99@163.co......
  • 日期工具类,获取全年每月有几周,分别是多少,且每周对应的是几号到几号
    一、概述项目需要做日程组件,其中涉及到了日历这块的内容。需求:1.获取全年有多少个月2.获取每月有多少个周3.获取每月每一天对应的是星期几4.单独获取某一天对应的是星期几5.把以上四条组织成为一个集合二、代码示例/**......
  • 在Linux中,如何查看当前日期和时间?
    在Linux中查看当前日期和时间,最常用且直接的方法是使用date命令。这是一个快速简便的命令,不需要任何参数即可显示当前系统的日期和时间信息。以下是具体的操作步骤:打开终端:首先,打开你的Linux系统的终端。这可以通过快捷键(通常是Ctrl+Alt+T)或者从应用菜单中找到“终端”来完成......