У меня небольшая проблема с форматированием Java 8 LocalDateTime в моем приложении Spring Boot. С "нормальными" датами у меня проблем нет, но поля LocalDateTime преобразуются в следующие:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Хотя я хотел бы преобразовать его во что-то вроде:
"startDate": "2015-01-01"
Мой код выглядит так:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Но любая из приведенных выше аннотаций не работает, дата продолжает форматироваться, как указано выше. Предложения приветствуются!
@JsonSerialize(using = LocalDateTimeSerializer.class)
...application.properties
запись, как предлагает ответ @patelb.@JsonSerialize
аннотация, о которой говорил Ник, чтобы заставить ее работать.Я добавил
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1
зависимость и начал получать дату в следующем формате:это не то, что я хотел, но я приближался. Затем я добавил следующее
в файл application.properties, который дал мне нужный формат.
источник
jackson-datatype-jsr310
зависимости. Это должен быть принятый ответ.mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Вот он в maven, со свойством, чтобы вы могли выжить между обновлениями весенней загрузки
источник
@JsonSerialize(using = LocalDateTimeSerializer.class)
1) Зависимость
2) Аннотация с форматом даты и времени.
3) Spring Config.
источник
Я нашел другое решение, которое вы можете преобразовать в любой формат, который хотите, и применить ко всем типам данных LocalDateTime, и вам не нужно указывать @JsonFormat над каждым типом данных LocalDateTime. сначала добавьте зависимость:
Добавьте следующий bean-компонент:
в вашем файле конфигурации добавьте следующее:
Это будет сериализовать и десериализовать все свойства LocalDateTime и ZonedDateTime, если вы используете objectMapper, созданный spring.
Формат для ZonedDateTime: «2017-12-27T08: 55: 17.317 + 02: 00 [Азия / Иерусалим]» для LocalDateTime: «2017-12-27T09: 05: 30.523».
источник
SimpleModule
расширяетсяModule
.Module
это абстрактный.val bean = new SimpleModule();
работает отлично.Пишу этот ответ как напоминание и для меня.
Я объединил здесь несколько ответов, и в итоге мой работал с чем-то вроде этого. (Я использую SpringBoot 1.5.7 и Lombok 1.16.16)
источник
DateTimeFormat
и других.Это отлично работает:
Добавьте зависимость:
Добавьте аннотацию:
Теперь вы должны получить правильный формат.
Чтобы использовать средство сопоставления объектов, вам необходимо зарегистрировать JavaTime
источник
Как уже упоминалось, spring -boot загрузит все, что вам нужно (как для веба, так и для стартера webflux).
Но что еще лучше - вам не нужно самостоятельно регистрировать какие-либо модули. Взгляните сюда . Поскольку
@SpringBootApplication
используется@EnableAutoConfiguration
под капотом, значит, оноJacksonAutoConfiguration
будет добавлено в контекст автоматически. Теперь, если вы заглянете внутрьJacksonAutoConfiguration
, вы увидите:Этот парень будет вызван в процессе инициализации и получит все модули, которые сможет найти в пути к классам. (Я использую Spring Boot 2.1)
источник
Я использую Springboot 2.0.6, и по какой-то причине изменения yml приложения не работали. А еще у меня было больше требований.
Я попытался создать ObjectMapper и пометить его как Primary, но весенняя загрузка пожаловалась, что у меня уже есть jacksonObjectMapper как Primary !!
Вот что я сделал. Я внес изменения во внутренний картограф.
Мои сериализатор и десериализатор особенные - они имеют дело с 'дд / ММ / ГГГГ'; и во время десериализации - он изо всех сил пытается использовать 3-4 популярных формата, чтобы убедиться, что у меня есть LocalDate.
источник
@JsonDeserialize(using= LocalDateDeserializer.class)
не работает для меня с приведенной ниже зависимостью.Я использовал приведенный ниже конвертер кода для десериализации даты в файл
java.sql.Date
.источник
просто используйте:
или вы можете использовать шаблон по своему усмотрению, например:
('-' in place of '/')
источник
Я использую Spring Boot 2.1.8. Я импортировал
который включает файл jackson-datatype-jsr310 .
Затем мне пришлось добавить эти аннотации
и это работает. JSON выглядит так:
источник
spring-boot-starter-json
необходимо только в том случае, еслиspring-boot-starter-web
оно отсутствует.