我创建了一个提供 REST API 的 Spring Web 应用程序。我正在使用 Spring Boot 2.x、Spring Data REST、Spring HATEOAS、Spring JPA、Hibernate 5.3、Mysql。
我也在使用 jackson-datatype-jsr310。
我在整个应用程序中使用 UTC 日期,并将 UTC 日期存储在 Mysql 中。
在我的豆日期中定义为:
@NotNull
@Column(nullable = false)
private Instant validUntil;
一切正常,但是当 API 被使用时,日期会以这种格式返回:
"validUntil" : "2019-11-05T22:59:59.999999Z"
我想将应用程序中的每个日期时间截断为毫秒,因此日期应该是:
“有效直到”:“2019-11-05T22:59:59.999Z”
在我的 @Configuration 中,我使用自定义 JacksonModule:
@Bean
public Module customJacksonModule() {
SimpleModule customJacksonModule = new SimpleModule();
customJacksonModule.addSerializer(ConstraintViolationException.class, constraintViolationExceptionSerializer());
customJacksonModule.addSerializer(ValidationException.class, validationExceptionSerializer());
customJacksonModule.addSerializer(cloud.optix.server.exceptions.ValidationException.class, customValidationExceptionSerializer());
return customJacksonModule;
}
我尝试了几种方法,但到目前为止没有一个有效:
1. Application.properties
我放入spring.jackson.serialization.write-date-timestamps-as-nanoseconds = false我的 application.propreties
2. 自定义对象映射器
我尝试更改 objectMapper 的设置。
@Autowired(required = true)
public void configureJackson(ObjectMapper jackson2ObjectMapper) {
jackson2ObjectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
jackson2ObjectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
}
3.删除@EnableHypermediaSupport
@EnableHypermediaSupport(type = {EnableHypermediaSupport.HypermediaType.HAL})
所有这些操作都没有改变将日期返回给客户端的方式。我想要一些建议来理解/调试为什么日期没有以正确的格式返回。
作为补充说明,我发现在com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBaseserialize() 方法中我既没有useNanosecondsproperty ,也没有 default formatter。但是 application.properties 中的属性spring.jackson.serialization.write-dates-as-timestamps会影响日期格式。
呼如林
四季花海
慕标5832272
相关分类