zoukankan      html  css  js  c++  java
  • spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持

    由于项目将原有的  Date类型的字段改造为 LocalDate,LocalDateTime,LocalTime 类型, 发现  spring  对项目的时间格式无法自动转换,故需手动配置下。

    spring boot  中需在  maven 中引入  jsr-310  的支持

    <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
             <artifactId>jackson-datatype-jsr310</artifactId>
     </dependency>

    或者直接引用

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-json</artifactId>
    </dependency>

    因为  spring boot  是使用  jackson 作为  json 序列化和反序列化工具的,故只需配置  jackson 即可。

    配置如下:

    复制代码
    @Configuration
    public class JacksonConfig {
    
        @Bean
        public ObjectMapper objectMapper(){
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
            JavaTimeModule javaTimeModule = new JavaTimeModule();
            javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));
            javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));
            javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));
            javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));
            javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));
            javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));
            objectMapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule());
            return objectMapper;
        }
    
    }
    复制代码
    复制代码
    public class Constants {
    
        /** 默认日期时间格式 */
        public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
        /** 默认日期格式 */
        public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
        /** 默认时间格式 */
        public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
    
    }
    复制代码

    然后只需要在实体类中对应的时间类型上使用  @DateTimeFormat  和  @JsonFormat  即可。

  • 相关阅读:
    CSRF漏洞详细说明
    跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享
    使用 X-Frame-Options 防止被iframe 造成跨域iframe 提交挂掉
    html manifest 离线配置
    Xcode更新至IOS 9 后错误处理
    Web App时代的缓存机制新思路
    HTML5时代的Web缓存机制
    如何构建可缓存站点
    Web浏览器的缓存机制
    Web缓存的作用与类型
  • 原文地址:https://www.cnblogs.com/exmyth/p/14305299.html
Copyright © 2011-2022 走看看