gpt4 book ai didi

java - LocalDateTime 以数组格式表示

转载 作者:行者123 更新时间:2023-12-04 16:26:07 27 4
gpt4 key购买 nike

我在 Java 8 中使用 spring boot 2.2.6 和 Jackson 2.10.3。我在整个项目中使用 localdatetime 对象。 Jackson 无法正确解析 LocalDateTime(或者可能是默认格式)并以如下数组格式在 json 响应中发送日期

        "createdDate": [
2020,
8,
31,
0,
0,
0,
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")));
};
}
}
Controller
@RestConroller
@RequestMapping("/user")
UserController {

User getUser(){
User user = new User()
user.createdDate = LocalDateTime.now();
return user;
}

}
我可以在全局范围内做些什么,所以项目中的每个日期都将被序列化为字符串格式,如 2020-09-01 ?
任何建议都会有所帮助。

最佳答案

罪魁祸首是@EnableWebMVC .我的 cors 类(class)之一是 @EnableWebMVC注解。这将禁用 spring boot 自动配置并覆盖映射器配置。这不会让您覆盖对象映射器的配置。通过删除 @EnableMVC注释,这现在工作正常。在 SpringBoot2 ,我们不需要做任何与日期序列化相关的显式配置,它会自动解析中的java 8日期。 "yyyy-mm-dd"格式。

关于java - LocalDateTime 以数组格式表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63682619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com