LocalDateTime处理
发布日期:2025-04-11 03:20:19 浏览次数:10 分类:精选文章

本文共 6674 字,大约阅读时间需要 22 分钟。

Jackson配置说明:处理日期时间类型

1. 配置依赖

在项目的POM文件中,添加必要的Jackson依赖:

com.fasterxml.jackson.datatype
jackson-datatype-jsr310
2.10.3

2. 调用方配置

package com.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;@Configurationpublic class LocalDateTimeConfig {    @Bean(name = "mapperObject")    public ObjectMapper getObjectMapper() {        return new ObjectMapper()                .registerModule(new ParameterNamesModule())                .registerModule(new Jdk8Module())                .registerModule(new JavaTimeModule());    }}

3. 提供方配置

package com.config;import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;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 org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import java.text.SimpleDateFormat;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.format.DateTimeFormatter;import java.util.TimeZone;@Configuration@EnableWebMvcpublic class JacksonConfig extends WebMvcConfigurerAdapter {    private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";    private static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";    private static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";    @Bean    public ObjectMapper getObjectMapper() {        ObjectMapper objectMapper = new ObjectMapper();        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);        objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);        objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));        objectMapper.setDateFormat(new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT));        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(javaTimeModule);        return objectMapper;    }}

4. 配置说明

在Spring Boot应用中,通常只需配置提供方的Jackson模块即可满足需求。然而,在Feign等远程调用框架中,可能还需要在调用方配置ObjectMapper以确保数据格式一致。

5. 高级配置方法

另一种配置方式:

package com.config;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.*;import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;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 org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.io.IOException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.format.DateTimeFormatter;import java.util.Date;@Configurationpublic class LocalDateTimeConfig2 {    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";    @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(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(javaTimeModule);        return objectMapper;    }}

6. 注意事项

  • 在远程调用(如Feign)中,确保调用方和提供方的ObjectMapper配置一致。
  • 日期时间格式化的处理需谨慎,建议统一格式化方式。
  • 开启INDENT_OUTPUT以便于调试和阅读生成的JSON。
上一篇:localhost 目前无法处理此请求。 HTTP ERROR 500
下一篇:LobeChat配置OPENAI_PROXY_URL返回空值,如何解决?

发表评论

最新留言

不错!
[***.144.177.141]2025年04月26日 22时38分54秒