Джексон изменить формат отметки времени - PullRequest
0 голосов
/ 26 апреля 2018

Я выводлю некоторые результаты базы данных через json webservice. Просто как:

@GetMapping(produces = "application/json")
public List<Map<String, Object>> get(Param params) {
    return jdbcTemplate.queryForList(sql, params)
}

Проблема: java.sql.Timestamp преобразуется в формат 2018-04-26T07:52:02.000+0000, тогда как вывод простой базы данных будет 2018-04-26 07:52:02.0.

Вопрос: есть ли свойство конфигурации, чтобы сказать Spring, что он просто должен пройти через собственную метку времени, полученную из базы данных, вместо преобразования ее с помощью логики jackson?

Я хочу изменить формат java.sql.Timestamp глобально .

Важно : пожалуйста, не предлагайте никаких комментариев! У меня нет bean / pojo, я просто возвращаю простой результат базы данных как Map.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Или, если вам нужно это как Spring @ Bean

    @Bean
    public JacksonProperties jacksonProperties() {
        JacksonProperties properties = new JacksonProperties();
        properties.setDateFormat("yyyy-MM-dd'T'HH:mm:ss"); // put any pattern you need
        return properties;
    }
0 голосов
/ 26 апреля 2018

Я хочу изменить формат java.sql.Timestamp глобально .

Установите формат даты для вашего ObjectMapper экземпляра:

ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"));

В приложениях Spring вы можете представить экземпляр ObjectMapper в виде компонента:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"));
    return mapper;
}

В Spring Boot вы можете использовать свойство spring.jackson.date-format для определения формата даты:

spring.jackson.date-format: yyyy-MM-dd HH:mm:ss.S

Подробнее об общих свойствах приложения см. В документации .


Рассмотрим следующий код:

Map<String, Object> data = new HashMap<>();
data.put("date", new Timestamp(ZonedDateTime.now().toInstant().toEpochMilli()));
System.out.println(mapper.writeValueAsString(data));

Будет напечатано:

{"date":"2018-04-26 07:25:14.408"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...