LocalDateTime 以数组格式表示
LocalDateTime is representing in array format
我正在使用 spring boot 2.2.6 和 Jackson 2.10.3 Java 8. 我在整个项目中使用 localdatetime 对象。 Jackson 无法正确解析 LocalDateTime(或者可能是默认格式)并在 json 响应中发送日期,如下面的数组格式
"createdDate": [
2020,
8,
31,
0,
0,
0,
80000000
]
如 中所述,Spring boot 2 在 classpath 上已经有默认的 jackson-datatype-jsr310:2.10.3。我希望日期在 json 中表示为整个项目中的 2020-03-31:00。第一个解决方案在上面 link 中不起作用。之后我尝试了@JsonSerialize 注释并且它有效但我不想应用于每个 class。所以也尝试覆盖对象映射器但它没有工作
@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")));
};
}
}
控制器
@RestConroller
@RequestMapping("/user")
UserController {
User getUser(){
User user = new User()
user.createdDate = LocalDateTime.now();
return user;
}
}
有什么我可以在全球范围内做的吗,所以项目中的每个日期都将被序列化为字符串格式,如 2020-09-01?
任何建议都会有所帮助。
创建一个 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
.
罪魁祸首是 @EnableWebMVC
。我的一个 cors class 有 @EnableWebMVC
注释。这会禁用 spring 启动自动配置并覆盖映射器配置。这不会让您覆盖对象映射器的配置。通过删除 @EnableMVC
注释,现在可以正常工作了。在SpringBoot2中,我们不需要做任何与日期序列化显式相关的配置,它会自动解析[=19]中的java8个日期=]"格式。
我正在使用 spring boot 2.2.6 和 Jackson 2.10.3 Java 8. 我在整个项目中使用 localdatetime 对象。 Jackson 无法正确解析 LocalDateTime(或者可能是默认格式)并在 json 响应中发送日期,如下面的数组格式
"createdDate": [
2020,
8,
31,
0,
0,
0,
80000000
]
如
@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")));
};
}
}
控制器
@RestConroller
@RequestMapping("/user")
UserController {
User getUser(){
User user = new User()
user.createdDate = LocalDateTime.now();
return user;
}
}
有什么我可以在全球范围内做的吗,所以项目中的每个日期都将被序列化为字符串格式,如 2020-09-01?
任何建议都会有所帮助。
创建一个 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
.
罪魁祸首是 @EnableWebMVC
。我的一个 cors class 有 @EnableWebMVC
注释。这会禁用 spring 启动自动配置并覆盖映射器配置。这不会让您覆盖对象映射器的配置。通过删除 @EnableMVC
注释,现在可以正常工作了。在SpringBoot2中,我们不需要做任何与日期序列化显式相关的配置,它会自动解析[=19]中的java8个日期=]"格式。