首页 > 其他分享 >消息转换器 替代 @JsonFormat注解 完成 日期类序列化时的格式转换

消息转换器 替代 @JsonFormat注解 完成 日期类序列化时的格式转换

时间:2023-09-16 21:25:26浏览次数:31  
标签:JsonFormat FORMAT DEFAULT 转换器 new 序列化 class

  spring中的日期类从数据库读取完数据后,默认的格式其实很难看,传输给前端也不友好,所以我们一般会将日期类通过类似

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;

来更改日期类序列化时的格式。但这样太麻烦了,我们还可以用Spring MVC框架的消息转换器来替代每次书写一样的格式注解

 

 

  配置类中的设置。


/**
 * 配置类,注册web层相关组件
 */
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {//需要继承WebMvcConfigurationSupport类,因为要重写方法

    /**
     * 扩展Spring MVC框架的消息转换器
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {//重写方法
        //创建一个消息转换器对象
        MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
        //为消息转换器设置一个对象转换器,对象转换器可以将JAVA对象序列化为JSON数据
        converter.setObjectMapper(new JacksonObjectMapper());
        //第一个数字是索引,定义对象转换器优先级的,因为消息转换器本身就有几个对象转换器,如果不写索引默认优先级最低,可能会不执行
        converters.add(0,converter);
    }
}

  还需要设置一个对象转换器,对象转换器大致是这样,在此基础上改改就好。

/**
 * 对象映射器:基于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);
    }
}

 

标签:JsonFormat,FORMAT,DEFAULT,转换器,new,序列化,class
From: https://www.cnblogs.com/cyknote/p/17707318.html

相关文章

  • 在 Java 中自定义反序列化:实现可序列化接口
    实现可串行化接口的功能Serialized接口用于管理Java默认序列化机制使用的序列化和反序列化过程。Java虚拟机(JVM)通过该类的Serialized接口实现来指示该类是否具有可序列化和反序列化的能力。该接口不仅有利于序列化,而且还使开发人员可以自由地更改默认的反序列化行为。由......
  • @DatetimeFormat与@JsonFormat
    @DateTimeFormat(pattern=“yyyy-MM-ddHH:mm:ss”)是将String转换成Date,一般前台给后台传值时用@JsonFormat(pattern=“yyyy-MM-ddHH:mm:ss”,timezone=”GMT+8”)将Date转换成String一般后台传值给前台时......
  • php反序列化神奇构造
    来自[网鼎杯2020朱雀组]phpweb打开看看,我超,孙......
  • SQL注入和序列化的结合
    题目来自:[网鼎杯2018]Fakebook感觉原来学的有点局限,就只考虑到sql注入或者php反序列化啥的单方向,很少思考过结合起来的考法。话不多说,直接开解:登录要密码,join就是注册,估计直接注入注不出来,不然就不会给注册的选项了,那么我们就注册一个吧。这里注意一下blog的意思是给一个域......
  • 《Web安全基础》07. 反序列化漏洞
    @目录1:基本概念1.1:序列化&反序列化1.2:反序列化漏洞1.3:POP链2:PHP反序列化2.1:序列化&反序列化2.2:魔术方法3:JAVA反序列化3.1:序列化&反序列化3.2:反射机制3.3:相关资源本系列侧重方法论,各工具只是实现目标的载体。命令与工具只做简单介绍,其使用另见《安全工具录》。靶场参考:pi......
  • Java反序列化:CommonsCollections7调试分析
    CommonsCollections7基础知识1.HashTable散列表,也称为哈希表,以key-value形式进行访问的数据结构HashTable具有线程安全:多个线程同时访问它时,不会导致数据不一致。相对于HashMap、ConcurrentHashMap等线程安全性散列表,HashTable比较古老诸如散列表,常见的类方法:putget......
  • @JsonSerialize @JsonDeserialize @JsonFormat 三个注解的区别及一般用法
    三个注解区别@JsonSerialize:该注解用于指定在将Java对象序列化为JSON字符串时使用的序列化器。可以将其应用于字段、方法或类级别。通过@JsonSerialize注解,可以自定义序列化过程,例如将日期格式化为特定的字符串、将枚举类型序列化为其名称而不是值等。@JsonDeserialize:该注解用......
  • Java反序列化漏洞实现
    Java反序列化漏洞实现一、说明以前去面试被问反序列化的原理只是笼统地答在参数中注入一些代码当其反序列化时被执行,其实“一些代码”是什么代码“反序列化”时为什么就会被执行并不懂;反来在运营商做乙方经常会因为java反反序列化漏洞要升级commons.collections或给中间件打补丁......
  • 振弦传感器信号转换器在岩土工程监测中的注意事项
    振弦传感器信号转换器在岩土工程监测中的注意事项振弦传感器是岩土工程中常用的一种监测设备,用于监测土体和岩体的振动情况。而振弦传感器信号转换器则是将传感器所获得的振动信号转换为人类可读的数据,以方便监测人员进行数据分析和工程决策。 然而,在使用振弦传感器信号转换......
  • 狸窝全能视频转换器
    狸窝全能视频转换器是一款视频转换工具。狸窝全能视频转换器可以将你的视频转换为MP4格式,方便您在手机,iPad上观看,不仅可以转换视频,还可以转换音频文件。狸窝全能视频转换器软件特色、狸窝全能视频转换器可以根据用户需求,选择合适的视频参数,如输出视频质量、尺寸、分辨率等。、狸窝......