我有一个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上进行测试)。这里有什么问题?
带有configureMessageConverters
的Soution正是我所需要的。我也有同样的问题,你真的帮了我。谢谢
也许你应该向Spring报告解决方案
在Jackson类中进行了一些调试之后,我发现使用默认的SerializerProvider
(DefaultSerializerProviderImpl
)调用了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值的正确方法是文字。 预期结果: 实际结果: