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

Spring Boot Rest-OffsetDateTime返回为浮动

施飞雨
2023-03-14

我有一个Spring Boot应用程序(2.4.1),其中OffsetDateTime字段作为浮点值从RestController返回。示例:

"created_at": 1616080724.531610100

我尝试了这个线程中所有建议的解决方案。他们都不为我工作。

我还尝试添加一个非常简单的endpoint,它只返回OffsetDateTime

@GetMapping("/test")
public OffsetDateTime test() {
    return OffsetDateTime.now();
}

结果是一样的,它作为浮点值返回。

然后我在一个最小的Spring Boot项目中尝试了相同的终点,它按预期以ISO格式返回:

"2021-03-18T15:39:14.5295632+01:00"

这一切都指向了一些传递依赖,使Sprint Boot使用的默认Jackson序列化程序混乱。但是mvn依赖关系:Tree不会给我任何可疑的依赖关系(例如没有gson marshaller依赖关系)。

我还尝试启用TRACE日志记录,我可以看到用编写的对象具有正确格式的created_at时间:

TRACE org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor - Writing [class MyObject {
....
createdAt: 2021-03-18T16:37:34.113316500+01:00
...

但它在客户端仍然是浮动的(在浏览器和Postman上进行测试)。这里有什么问题?


共有2个答案

丰智
2023-03-14

带有configureMessageConverters的Soution正是我所需要的。我也有同样的问题,你真的帮了我。谢谢

也许你应该向Spring报告解决方案

田修为
2023-03-14

在Jackson类中进行了一些调试之后,我发现使用默认的SerializerProviderDefaultSerializerProviderImpl)调用了InstantSerializerBase#serialize方法,该方法具有序列化功能。将日期写为时间戳功能已启用。这导致将OffsetDateTime值序列化为epoch seconds nano。

我通过调整我们的WebMVCConfiguer实现,解决了这个问题,如下所示:

@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {

    // Some other configuration

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new MappingJackson2HttpMessageConverter(objectMapper()));
    }

    private ObjectMapper objectMapper() {
        return new ObjectMapper()
            .disable(WRITE_DATES_AS_TIMESTAMPS)
            .registerModule(new JavaTimeModule());
    }
}

在此更改之后,OffsetDateTime字段最终以ISO格式序列化。

"created_at": "2021-03-19T17:05:27.785646+01:00"
 类似资料:
  • 问题内容: 因此,如果我有一个范围为‘0-1024’的数字,并且希望将其取为‘0-255’,那么数学将决定将输入除以输入的最大值(在这种情况下为1024),从而得出我的数字介于0.0-1.0之间。然后将其乘以目标范围(255)。 我要做什么! 但是由于Java中的某些原因(使用处理),它将始终返回值0。 该代码将像这样简单 但是我只得到0.0。我已经尝试过两次和诠释。一切都无济于事。为什么!? 问

  • 有可能有一个返回整数或浮点的函数吗?如果可能的话,我想把这两个函数合二为一:

  • 我正在开发一个REST API,使用Spring Boot启动数据Rest。我想与JPA同步的一个类是User类,其中包含有关用户的信息,包括谁被允许访问API。 不幸的是,拥有用户和UserRepository意味着我的用户类在API中公开。我能够删除Id(在configureRepositoryRestConfiguration函数中)、用户名和密码(通过向我的用户类的每个变量添加@JsonI

  • 我经常遇到这样的异常: 我做错了什么?

  • 问题内容: 我有以下POJO: 我正在建立一个库来检测OneToOne或ManyToOne(并进行适当的操作)。它总是作为ManyToOne回来。 `` for(String propertyName:cmd.getPropertyNames()){org.hibernate.type.Type propertyType = cmd.getPropertyType(propertyName); }

  • 根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果: