配置类的代码转自这里
配置类
@Configuration
@ConditionalOnClass(ObjectMapper.class)
@AutoConfigureBefore(JacksonAutoConfiguration.class)
public class JacksonConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return builder -> {
builder.locale(Locale.CHINA);
builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
builder.modules(new Java8TimeModule());
};
}
}
配置类里要调用的TimeModule类
public class Java8TimeModule extends SimpleModule {
public Java8TimeModule() {
this.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
this.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
this.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
this.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
this.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
this.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
}
}
下面是我实际使用的测试
测试用到的Dto
@Data
class TimeDto implements Serializable {
private static final long serialVersionUID = 1L;
//@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date date;
private Integer age;
}
测试用到的Controller
@PostMapping(value="/timePost")
@ResponseBody
public TimeDto time(@RequestBody TimeDto timeDto){
return newDto;
}
Postman请求体
Postman响应结果
可以看到,配置后成功实现时间格式转换,不需要在字段上添加@JsonFormat注解,无论是LocalDateTime类型还是Date类型,都不再需要注解。