Я создал веб-приложение Spring, которое предлагает REST API. Я использую Spring Boot 2.x, Spring Data REST, Spring HATEOAS, Spring JPA, Hibernate 5.3, Mysql.
Я также использую jackson-datatype-jsr310.
I 'Я работаю с датами UTC во всем приложении, и я храню даты UTC в Mysql.
В моем бине даты определены как:
@NotNull
@Column(nullable = false)
private Instant validUntil;
Все работает, но когда используется APIдаты возвращаются в следующем формате:
"validUntil" : "2019-11-05T22:59:59.999999Z"
Я хочу обрезать каждую дату-время в моем приложении до миллисекунд, поэтому дата должна быть:
"validUntil":"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
в моем приложении .properties
2. Пользовательский ObjectMapper
Я пытался изменить настройки 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. Removed @ EnableHypermediaSupport
@EnableHypermediaSupport(type = {EnableHypermediaSupport.HypermediaType.HAL})
Все эти действия не изменили способ возврата даты клиенту. Я хотел бы получить совет, чтобы понять / отладить, почему дата не возвращается в правильном формате.
В качестве дополнительного примечания я обнаружил, что в com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase
в методе serialize () у меня нет ни useNanoseconds
свойство, ни по умолчанию formatter
. Однако свойство spring.jackson.serialization.write-dates-as-timestamps
в application.properties влияет на формат даты.