springboot关于Jackson.时间格式化

如果是Date类型

第一种
spring.jackson.date-format =yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
第二种
@JsonFormat(locale=“zh”, timezone=“GMT+8”, pattern=“yyyy-MM-dd HH:mm:ss”)
第三种

@Bean
    public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = converter.getObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.setDateFormat(new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN));
        converter.setObjectMapper(objectMapper);
        return converter;
    }
    //添加转换器
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //将我们定义的时间格式转换器添加到转换器列表中,
        //这样jackson格式化时候但凡遇到Date类型就会转换成我们定义的格式
        converters.add(jackson2HttpMessageConverter());
    }

如果是LocalDateTime类型

单个配置
@JsonFormat(pattern = " yyyy-MM-dd HH:mm:ss", timezone = “Asia/Shanghai”)
private LocalDateTime created;

依赖必须加入

com.fasterxml.jackson.core
jackson-annotations
2.9.0

2.2、全局配置

  @Value("${spring.jackson.date-format}")
    private String pattern;
 
    @Bean
    public LocalDateTimeSerializer localDateTimeDeserializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }
 
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
    }
spring: 
  jackson: 
    # 设置属性命名策略,对应jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json驼峰式转下划线,json body下划线传到后端自动转驼峰式 
    property-naming-strategy: SNAKE_CASE
    
    # 全局设置@JsonFormat的格式pattern 
    date-format: yyyy-MM-dd HH:mm:ss 
    
    # 当地时区 
    locale: zh 
    
    # 设置全局时区 
    time-zone: GMT+8 
    
    # 常用,全局设置pojo或被@JsonInclude注解的属性的序列化方式 
    default-property-inclusion: NON_NULL #不为空的属性才会序列化,具体属性可看JsonInclude.Include 
    
    # 常规默认,枚举类SerializationFeature中的枚举属性为key,值为boolean设置jackson序列化特性,具体key请看SerializationFeature源码 
    serialization: 
      WRITE_DATES_AS_TIMESTAMPS: true # 返回的java.util.date转换成timestamp 
      FAIL_ON_EMPTY_BEANS: true # 对象为空时是否报错,默认true 
    
    # 枚举类DeserializationFeature中的枚举属性为key,值为boolean设置jackson反序列化特性,具体key请看DeserializationFeature源码 
    deserialization: 
      # 常用,json中含pojo不存在属性时是否失败报错,默认true 
      FAIL_ON_UNKNOWN_PROPERTIES: false 
    
    # 枚举类MapperFeature中的枚举属性为key,值为boolean设置jackson ObjectMapper特性 
    # ObjectMapper在jackson中负责json的读写、json与pojo的互转、json tree的互转,具体特性请看MapperFeature,常规默认即可 
    mapper: 
      # 使用getter取代setter探测属性,如类中含getName()但不包含name属性与setName(),传输的vo json格式模板中依旧含name属性 
      USE_GETTERS_AS_SETTERS: true #默认false
    
    # 枚举类JsonParser.Feature枚举类中的枚举属性为key,值为boolean设置jackson JsonParser特性 
    # JsonParser在jackson中负责json内容的读取,具体特性请看JsonParser.Feature,一般无需设置默认即可 
    parser: 
      ALLOW_SINGLE_QUOTES: true # 是否允许出现单引号,默认false 
    
    # 枚举类JsonGenerator.Feature枚举类中的枚举属性为key,值为boolean设置jackson JsonGenerator特性,一般无需设置默认即可 
    # JsonGenerator在jackson中负责编写json内容,具体特性请看JsonGenerator.Feature

使用配置spring.jackson.property-naming-strategy=SNAKE_CASE
SNAKE_CASE-返回的json驼峰式转下划线,json body下划线传到后端自动转驼峰式
但是,很不幸,由于项目中使用了WebMvcConfigurationSupport,导致jackson配置失效
于是乎,寻找其他解决方法,一种方式是在类上面加
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

也可以在字段上加(这种方式不建议,每个字段上都加,任务量太大)
@JsonProperty(value = “detail_address”)

/**
     * 使用此方法, 以下 spring-boot: jackson时间格式化 配置 将会失效
     * spring.jackson.time-zone=GMT+8
     * spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
     * 原因: 会覆盖 @EnableAutoConfiguration 关于 WebMvcAutoConfiguration 的配置
     * */
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = converter.getObjectMapper();
        
        // 设置驼峰标志转下划线
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        
        // 设置格式化内容
        converter.setObjectMapper(objectMapper);
        converters.add(0, converter);
    }
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值