杰克逊的serialize/deserializejava.time在全球范围内都很好,但它的默认日期时间格式是ISO标准,比如2018-01-10T10:20:30 for LocalDateTime和2018-01-10T10:20:30+08:00 for OffsetDateTime。但是我需要为LocalDateTime和OffsetDateTime设置一个全局本地格式,比如LocalDateTime和OffsetDateTime,而不需要T和OffsetTime (使用本地默认OffsetTime)。我该怎么做?
注:我知道
@JsonFormat,@JsonSerialize和@JsonDeserialize。这不是全球性的环境。
发布于 2019-01-10 11:13:13
弹簧靴
@SpringBootApplication
public class Application implements Jackson2ObjectMapperBuilderCustomizer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void customize(Jackson2ObjectMapperBuilder builder) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTimeSerializer localDateTimeSerializer = new LocalDateTimeSerializer(formatter);
builder.failOnEmptyBeans(false) // prevent InvalidDefinitionException Error
.serializerByType(LocalDateTime.class, localDateTimeSerializer);
}
}Springboot & Spring框架
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTimeSerializer localDateTimeSerializer = new LocalDateTimeSerializer(formatter);
LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(formatter);
JavaTimeModule module = new JavaTimeModule();
module.addSerializer(LocalDateTime.class, localDateTimeSerializer);
module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
// add converter at the very front
// if there are same type mappers in converters, setting in first mapper is used.
converters.add(0, new MappingJackson2HttpMessageConverter(mapper));
}
}希望这能帮到你。
发布于 2018-08-24 02:32:39
您可以配置一个ObjectMapper。本页解释了https://www.baeldung.com/jackson-serialize-dates是如何实现的。我想你想要接近那一页的例子4的东西。
然后,您需要使之成为全局ObjectMapper。不同的框架使用不同的方法。本页解释了如何在Spring和Spring Configuring ObjectMapper in Spring中这样做。对于其他人,只要谷歌就可以了。
发布于 2021-06-07 10:22:19
如果您正在全局地使用ObjectMapper的单个实例(并且想要一个独立于Spring/Java8Jackson模块的解决方案),您可以这样做:
public ObjectMapper getCustomConfigMapper() {
final ObjectMapper mapper = new ObjectMapper();
final SimpleModule module = new SimpleModule();
module.addDeserializer(LocalDateTime.class, new CustomLocaDateTimeDeserializer());
mapper.registerModule(module);
return mapper;
}
public static class CustomLocaDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
public static final DateTimeFormatter CUSTOM_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext __) throws IOException {
final String value = jsonParser.getText().strip();
return LocalDateTime.parse(value, CUSTOM_FORMATTER);
}
}https://stackoverflow.com/questions/51996459
复制相似问题