各位大咖,今天在学习全局定义时间格式的时候,发现了一个问题
就是在加入了WebMvcConfigurer实现类之后,我使用的Jackson2ObjectMapperBuilderCustomizer就失效了
这是实体类的代码,主要是定义了多个时间格式
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrderDTO {
private LocalDateTime createTime;
private Date updateTime;
private LocalDate createDate;
private LocalTime localTime;
}
这是全局定义的代码
import com.fasterxml.jackson.databind.SerializationFeature;
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.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
/**
* @author pengweixin
*/
@JsonComponent
@Configuration
public class DateFormatConfig {
@Value("${spring.jackson.date-time-format:yyyy-MM-dd HH:mm:ss}")
private String dataTimePattern;
@Value("${spring.jackson.date-format:yyyy-MM-dd}")
private String dataPattern;
@Value("${spring.jackson.time-format:HH:mm:ss}")
private String timePattern;
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() {
return builder -> {
DateFormat df = new SimpleDateFormat(dataTimePattern);
builder.failOnEmptyBeans(false)
.failOnUnknownProperties(false)
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.dateFormat(df);
};
}
@Bean
public LocalDateTimeSerializer localDateTimeDeserializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dataTimePattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
@Bean
public LocalDateSerializer localDateDeserializer() {
return new LocalDateSerializer(DateTimeFormatter.ofPattern(dataPattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderLocalDateCustomizer() {
return builder -> builder.serializerByType(LocalDate.class, localDateDeserializer());
}
@Bean
public LocalTimeSerializer localTimeDeserializer() {
return new LocalTimeSerializer(DateTimeFormatter.ofPattern(timePattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderLocalTimeCustomizer() {
return builder -> builder.serializerByType(LocalTime.class, localTimeDeserializer());
}
}
不加入WebMvcConfigurer实现类之前,返回值是这样的
加入WebMvcConfigurer实现类之前,返回值是这样的
然后在百度搜索到说这是序列化格式的问题,要加一个格式,最后WebMvcConfigurer实现类是这样的
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration // 配置类
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
// 不显示为null的字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
// 放到第一个
converters.add(0, jackson2HttpMessageConverter);
}
}
但是加入之后,我的全局定义还是没有实现
这是什么原因导致的呢,有没有哪位大咖能解答一下,不胜感激!