Формат даты SpringFox в миллисекундах

Я использую SpringFox (Swagger) для документирования своих REST API. Одной из приятных функций Swagger является демонстрация примера модели и формата типа данных.

Теперь я настроил свои API для создания и использования дат в миллисекундах, но когда я смотрю на образец модели JSON, формат даты следующий: "2015-09-21T00:51:32.617Z". Смотрите скриншот ниже. Можно ли сказать SpringFox (Swagger), как правильно форматировать дату?

введите здесь описание изображения


person Maksim    schedule 21.09.2015    source источник
comment
У меня такая же проблема. Я хочу отформатировать дату ГГГГ-ММ-ДД. Вы нашли решение ?   -  person YLombardi    schedule 19.10.2015
comment
Нет, я не нашел решения для этого. Мне просто нужно было сказать разработчику, что все даты будут в формате, который я указал, и не смотреть на формат даты Swagged. Ознакомьтесь с этой проблемой GitHub, которую я поднял с разработчиками Springfox: github.com/springfox/springfox/issues /979   -  person Maksim    schedule 20.10.2015


Ответы (3)


Вы можете попробовать:

   Docket docket = new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(getApiInfo())
                    .directModelSubstitute(YourDateTimeClass.class, Integer.class);

По сути, вы говорите Swagger заменить класс даты целым числом, которое может представлять миллисекунды.

person Luthien Nargothrond    schedule 04.11.2015

Это связано с базовым сериализатором Jackson. Вы должны установить для него правильный формат даты, иначе по умолчанию он использует метки времени.

Вот пример конфигурации

@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter jsonMessageConverter = (MappingJackson2HttpMessageConverter) converter;
                ObjectMapper objectMapper = jsonMessageConverter.getObjectMapper();
                objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
                break;
            }
        }
    }
}

Таким образом, он будет использовать формат даты и времени ISO-8601. Вот еще одна запись в блоге, в которой объясняется, как установить собственный предпочтительный формат даты: http://yysource.com/2016/06/change-default-date-for-jackson-in-spring-boot-application/

person Alex Rashkov    schedule 11.07.2016
comment
+1 Я использую spring-hateoas, что неплохо, но не связывает ObjectMapper как bean-компонент. Я искал, как получить доступ к ObjectMapper в течение последних нескольких дней! Спасибо за то, что поделился этим. - person Devon_C_Miller; 16.01.2017

У меня возникла проблема, аналогичная вашей, и я решил ее, добавив следующую конфигурацию в файл application.properties моего Spring Boot:

spring.jackson.date-format=com.fasterxml.jackson.databind.util.ISO8601DateFormat

person Kevin Liu    schedule 31.05.2017