Прежде всего, метод Date.toString
генерирует вводящий в заблуждение вывод, и мы не должны на него полагаться. Простой пример:
SimpleDateFormat dateToStringFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", new Locale("us"));
Date parsed = dateToStringFormat.parse("Wed Mar 20 09:00:00 KST 2019");
System.out.println("Default toString: " + parsed);
dateToStringFormat.setTimeZone(TimeZone.getTimeZone("Asia/Seoul"));
System.out.println("With 'Asia/Seoul' TZ: " + dateToStringFormat.format(parsed));
dateToStringFormat.setTimeZone(TimeZone.getTimeZone("Chile/Continental"));
System.out.println("With 'Chile/Continental' TZ: " + dateToStringFormat.format(parsed));
печать:
Default toString: Wed Mar 20 01:00:00 CET 2019
With 'Asia/Seoul' TZ: Wed Mar 20 09:00:00 +0900 2019
With 'Chile/Continental' TZ: Tue Mar 19 21:00:00 -0300 2019
Как вы можете видеть, я проанализировал вашу примерную дату Wed Mar 20 09:00:00 KST 2019
и напечатал с использованием метода toString
и отформатировал ее с двумя разными часовыми поясами. Итак, каждый видит дату в сочетании со своим часовым поясом. Подробнее о:
Мы не можем определить шаблоны даты в конфигурации, как вы предложили. Смотрите доступные Jackson
опции конфигурации здесь .
Вы можете настроить формат, используя аннотацию com.fasterxml.jackson.annotation.JsonFormat
. Поскольку Java 8
доступно, мы должны использовать java.time.*
классы для связанных со временем свойств. Пример POJO
класс может выглядеть так:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.MonthDay;
public class RequestPayload {
@JsonFormat(pattern = "MM/dd")
private MonthDay md;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate date;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime dateTime;
// getters, setters, toString
}
Чтобы все заработало, нужно зарегистрировать JavaTimeModule
модуль:
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.modules(new JavaTimeModule());
return builder;
}
Если вы можете изменить свои свойства Bean
на java.time.*
классы, просто увеличьте эти даты с Controller
до DB
. В другом случае см. Этот вопрос: Преобразование между java.time.LocalDateTime и java.util.Date .