Почему Джексон конвертирует ZonedDateTime в десятичное? - PullRequest
3 голосов
/ 10 октября 2019

Я пытаюсь понять, почему Джексон преобразует ZonedDateTime в десятичное значение при получении MvcResult в тесте на интеграцию пружины?

Вот ожидаемая дата: 2019-10-01T10: 10: 44 + 02: 00 [Европа / Париж] и фактический результат: 1572426644.000000000

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

Вот ответ, который дает точное решение вашего вопроса: Spring Data JPA - формат ZonedDateTime для сериализации JSON . Короче говоря, вам нужно аннотировать ваш ZonedDateTime следующим образом.

ZonedDateTime time = ZonedDateTime.now();

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getTime() {
    return time;
}

Вам также может понадобиться добавить зависимость для JSR-310

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>
2 голосов
/ 10 октября 2019

Если вы используете Spring Boot , вы можете решить его более общим способом с помощью следующего свойства:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false

Таким образом, вам не нужно указывать JsonFormat длякаждое поле даты, которое у вас есть.

Если вы также хотите настроить формат даты глобально, используйте свойство:

spring.jackson.date-format

Источник: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

1 голос
/ 10 октября 2019

Я предотвратил преобразование, введя MappingJackson2HttpMessageConverter в интеграционном тесте

MockMvcBuilders.standaloneSetup(myController).setMessageConverters(mappingJackson2HttpMessageConverter).build();
...