Ява 8 даты приходят как ноль в весной загрузки положить запрос - PullRequest
0 голосов
/ 09 мая 2018

У меня есть конечная точка отдыха, где я хочу сделать запрос пут. У объекта, который я помещаю, есть пара строковых полей и LocalDateTime. Строки проходят просто отлично, но поле LocalDateTime имеет значение null. Странно, это не дает мне ошибку «мы не можем десериализовать это». Вот мое тело запроса.

[
{
    "id": 2,
    "description": "test2",
    "modifyDate": "2018-05-07T16:13:04.597",
    "modifyUser": "me"
}

]

Вот соответствующая часть моего pojo

@Column
LocalDateTime modifyDate;

Вот конечная точка

@PUT
@Path("/putJobs")
@Consumes({MediaType.APPLICATION_JSON})
public Response create(@NotNull @Valid List<Job> jobs) {
    *my jobs object contains 1 job, with a null value for modifyDate*
}

Вот мой основной класс

    @SpringBootApplication
@EnableCircuitBreaker
@EntityScan("whatever.pojos")
@ImportResource({"classpath*:/META-INF/**/spring-bootstrap.xml"})
@EnableJpaRepositories(basePackages="whatever.webservice", entityManagerFactoryRef="entityManagerFactory")
public class Application {


@Bean
    @Primary
    public ObjectMapper serializingObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return objectMapper;
    }

И, наконец, вот мои зависимости Джексона и Java 8

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.4</version>
</dependency>

1 Ответ

0 голосов
/ 09 мая 2018

Не ясно, реализовали ли вы LocalDateTimeDeserializer и LocalDateTimeSerializer или импортировали их откуда-то.

Как только вы используете модуль jackson-datatype-jsr310, удалите аннотации @JsonDeserialize и @JsonSerialize из поля LocalDateTime и позвольте Джексону обработать это для вас. Этот модуль даст вам LocalDateTimeSerializer и LocalDateTimeDeserializer.

Просто убедитесь, что вы зарегистрировали JavaTimeModule в своем экземпляре ObjectMapper и отключили WRITE_DATES_AS_TIMESTAMPS:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

Подробнее см. документацию .

...