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

offsetdatetime在jackson绑定spring-boot-rest api中不起作用

胡翔
2023-03-14

在我的项目中,我们使用的是springboot2.6.6版本

我的问题是,如果我在请求bean中使用OffsetDateTime,它将不起作用。它抛出400状态码

@Data
@NoArgsConstructor
class RequestBean {

  private OffsetDateTime submittedDateTime;
  
     public void setLastUpdatedDateTime(Long epochTime) {
        if(nonNull(epochTime)) {
           this.lastUpdatedDateTime = OffsetDateTime.ofInstant(Instant.ofEpochMilli(epochTime), ZoneOffset.UTC);
        }
    }
}

问题是,我们得到的偏移日期时间 日期 这种格式的日期“2022-04-20T08:00Z”

由于此“Z”内部原因,当jackson将请求绑定到bean时发生了400 IllegalArgumentException。

如果我像OffsetDateTime.parse(“2022-04-2T08:00:00.000”)这样给出空值或硬编码日期,它的工作正常。

我在下面添加了对象映射器bean配置,但没有运气

@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;
    }

如何解决这个错误的任何帮助将不胜感激!!!

共有1个答案

白昊东
2023-03-14

Z 表示与 UTC 的偏移量为零小时-分钟-秒。

使用即时解析。即时对象始终具有零偏移量。

Instant instant = Instant.parse( "2022-04-20T08:00Z" ) ; 

对于缺少偏移量或时区的输入,如“2022-04-2T08:00:00.000”,请将其解析为LocalDateTime

 类似资料:
  • 我使用fasterxml jackson进行json序列化。我已将日期序列化程序编写为 但它没有被调用。然而,其他Jackson序列化程序运行良好。 现在日期正被正确序列化。但是现在有效的JSON等效字符串并没有像这里提到的那样转换为JSON。

  • 我试图输出一个OffsetDateTime从我的Spring应用程序,并在我的application.properties这些属性: 但是,当返回日期时,其格式为 如何在Spring应用程序中正确配置日期格式?

  • 我有一个简单的格拉德Spring Boot(1 . 3 . 3版)WebMVC应用程序,我通过“格拉德启动”从命令行运行。我还包含了Spring Security,并通过包含一个java security config类覆盖了一些默认的安全配置。我的构建文件是 我的安全配置类是 我还有一个home控制器,当我运行应用程序并转到localhost:8080/ I获得主页时,它将URL“/”映射到视图

  • 我正在将Spring Boot从1.3升级到1.5。对于升级到1.5,我已经替换了 还有,我在用

  • 我正在使用model属性来获取employee对象。xml文件包含hibernate验证器依赖项。

  • 我对Spring Boot和AOP是新手,我花了三天时间试图让它工作,但没有效果。 我有一门课叫应用程序。该类调用一个名为invokeRetrieveMethod的方法--该方法调用autowired businessClass对象中的另一个方法。我只是试图记录运行使用自定义注释的方法所需的时间,但在运行代码时,我得到了一个空指针异常。请救命! 我的自定义注释