如何解决LocalDateTime以数组格式表示
我在Java 8中使用spring boot 2.2.6和Jackson 2.10.3,在整个项目中都使用localdatetime对象。杰克逊无法正确解析LocalDateTime(或可能是其默认格式),并且无法以json格式(如下面的数组格式)发送日期
"createdDate": [
2020,8,31,80000000
]
如JSON Java 8 LocalDateTime format in Spring Boot中所述,Spring Boot 2已经在类路径上具有默认的jackson-datatype-jsr310:2.10.3。我希望日期在整个项目中以json的形式表示为2020-03-31:00。在以上链接中,第一种解决方案无效。之后,我尝试了@JsonSerialize注释,它可以工作,但是我不想在每个类上应用。因此也尝试覆盖对象映射器,但没有用
@Primary
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION,true);
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,true);
SimpleModule module = new SimpleModule("my custom date serializer");
module.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer());
mapper.registerModule(module);
return mapper;
}
还尝试自定义Jackson2ObjectMapperBuilder,但日期仍为数组格式
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.serializationInclusion(JsonInclude.Include.NON_NULL);
builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
SimpleModule module = new SimpleModule("my custom date serializer");
module.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer());
builder.modulesToInstall(modules)
return builder;
}
还尝试过Jackson2ObjectMapperBuilderCustomizer
@Configuration
public class JacksonConfiguration {
@Primary
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
return builder -> {
builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
};
}
}
Contoller
@RestConroller
@RequestMapping("/user")
UserController {
User getUser(){
User user = new User()
user.createdDate = LocalDateTime.now();
return user;
}
}
我在全局级别上能做些什么,所以项目中的每个日期都将像2020-09-01这样的字符串格式序列化?
任何建议都会有所帮助。
解决方法
罪魁祸首是@EnableWebMVC
。我的cors课堂之一有@EnableWebMVC
注解。这禁用了Spring Boot的自动配置,也覆盖了映射器的配置。这不会让您覆盖对象映射器的配置。通过删除@EnableMVC
注释,现在可以正常工作。在 SpringBoot2 中,我们不需要进行任何与日期序列化明确相关的配置,它将自动解析“ yyyy-mm-dd” 格式的Java 8日期。
创建一个Jackson2ObjectMapperBuilderCustomizer bean:
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
return builder -> {
builder.simpleDateFormat(dateTimeFormat);
builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
};
}
将属性spring.jackson.serialization.write_dates_as_timestamps=false
添加到application.properties
,或者您也可以在Jackson2ObjectMapperBuilderCustomizer
中以编程方式进行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。