当前位置: 首页 > 知识库问答 >
问题:

Spring Boot中OffsetDateTime的Jackson日期格式

孟建木
2023-03-14

我试图输出一个OffsetDateTime从我的Spring应用程序,并在我的application.properties这些属性:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm

但是,当返回日期时,其格式为

"2017-01-30T16:55:00Z"

如何在Spring应用程序中正确配置日期格式?

共有3个答案

水焱
2023-03-14

添加对jackson-modules-java8的依赖对我来说很有用(不推荐使用jackson-datatype-jsr310)

<!-- deserialize Java 8 date time types e.g OffsetDateTime --> 
<dependency> 
  <groupId>com.fasterxml.jackson.module</groupId>
  <artifactId>jackson-modules-java8</artifactId>
</dependency>

我还需要添加以下内容以使其发挥作用:

 om.registerModule(new JavaTimeModule());

不需要写入日期,因为时间戳=false或om。禁用(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)——这适用于Java“Date”对象。

我用了这个注释:

 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")  

然后得到如下输出:

"时间戳":"2020-04-23T08:00:00.000-06:00"

华升
2023-03-14
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

通过这样做,您可以获得ISO 8601中的OffsetDateTime属性,包括目标中的偏移量。

公羊瀚
2023-03-14

所以我设法想出了一个解决方案,但如果你有其他选择,请发布它。

我最终创建了一个新的主ObjectMapperbean,并为OffsetDateTime注册了一个新模块。我可以在这里使用java设置自己的日期格式。时间总体安排DateTimeFormatter。我还必须用我的映射器注册JavaTimeModule

@Configuration
public class JacksonOffsetDateTimeMapper{

    @Primary
    @Bean
    public ObjectMapper objectMapper() {

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<OffsetDateTime>() {
            @Override
            public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
                jsonGenerator.writeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(offsetDateTime));
            }
        });
        objectMapper.registerModule(simpleModule);

        return objectMapper;
    }

}
 类似资料:
  • 请帮助更改日期格式。 **源**json文件 **目标**员工对象 我需要支持将文件json日期转换为对象。来自文件 对象 对象 库“com.fasterxml.jackson.datatype:jackson-datatype-jsr310” 日期:<代码>java。时间本地日期 我的目标是从文件中读取json数据并将其映射到对象。

  • 我想用特定的格式序列化POJO的某些日历字段。 我将添加一个格式为字符串的字段,因为它实际上是以24小时为单位表示一天,而不是一个特定的时间瞬间。但当我添加带有注释的新字段时: 我希望得到这样的JSON: 相反,我遇到了以下例外情况:

  • 我正在将日期/日期时间字符串转换为,我有一种日期时间格式,它可能有以下值之一: 有时有时间和没有时间,我需要将其转换为。 我已经尝试了下面的代码 因为没有时间,我将它设置为默认值,但是当我试图解析时 它抛出的错误类似于 线程"main"java.time.format.DateTimeParseException中的异常:无法解析文本'2016-06-06':无法从TemporalAccess:{

  • 我有一个来自API的日期格式,如下所示: 即YYYY-DD-MM HH:MM AM/PM GMT时间戳。我正在将这个值映射到POJO中的日期变量。显然,它显示转换错误。 我想知道两件事: 我需要使用什么格式来与Jackson进行转换?日期是一个很好的字段类型吗? 一般来说,在Jackson将变量映射到对象成员之前,有没有一种方法可以处理这些变量?例如,更改格式、计算等

  • 问题内容: 我有一个来自API的Date格式,如下所示: 这是YYYY-DD-MM HH:MM am / pm GMT时间戳。我将此值映射到POJO中的Date变量。显然,其显示转换错误。 我想知道两件事: 与Jackson进行转换时,我需要使用哪种格式?Date是否适合此字段类型? 通常,是否有一种方法可以在Jackson将变量映射到Object成员之前处理这些变量?诸如更改格式,计算等。 问题

  • 问题内容: 我有来自API的Date格式,如下所示: 这是YYYY-DD-MM HH:MM am / pm GMT时间戳。我将此值映射到POJO中的Date变量。显然,其显示转换错误。 我想知道两件事: 与Jackson进行转换时,我需要使用哪种格式?Date是否适合此字段类型? 通常,是否有一种方法可以在Jackson将变量映射到Object成员之前对其进行处理?诸如更改格式,计算等。 问题答案