SpringBoot menggunakan masa UTC secara lalai Jika kita perlu menggunakan waktu Daerah Kelapan Timur, kita boleh menggunakan konfigurasi berikut:
spring: jackson: time-zone: GMT+8
Kaedah ini ialah kaedah yang paling mudah. , tiada Sebarang kebergantungan dan kod tambahan diperlukan, tetapi perlu diingatkan bahawa konfigurasi ini berkesan secara global dan mungkin menjejaskan tempat lain yang perlu menggunakan masa UTC, dan ini perlu disemak semula setiap kali kebergantungan baharu ditambahkan, SpringBoot versi dinaik taraf, dsb. Adakah konfigurasi betul?
Cara lain ialah dengan menyesuaikan kelas konfigurasi Gunakan anotasi @Configuration untuk mencipta kelas konfigurasi, dan kemudian konfigurasikan Jackson2ObjectMapperBuilderCustomizer dalam kelas, dengan menyatakan zon waktu sebagai. Daerah Kelapan Timur.
@Configuration public class JacksonConfiguration { @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.timeZone(TimeZone.getTimeZone("GMT+8")); } }
Kaedah ini memerlukan kod tersuai, tetapi ia boleh mengawal julat masa Daerah Kelapan Timur dengan lebih fleksibel dan tidak akan menjejaskan tempat lain yang perlu menggunakan waktu UTC. Perlu diingat bahawa setiap kali anda menambah kebergantungan baharu atau menaik taraf versi SpringBoot, anda mesti mengesahkan semula sama ada konfigurasi itu betul.
Anda juga boleh menggunakan masa Daerah Kelapan Timur dengan memperibadikan ObjectMapper Jackson.
Kaedah pelaksanaan khusus adalah untuk menetapkan JavaTimeModule tersuai pada ObjectMapper, dan kemudian menetapkan zon waktu pada modul kepada Daerah Dongba.
Kod sampel adalah seperti berikut:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; public class CustomObjectMapper extends ObjectMapper { public CustomObjectMapper() { JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); this.registerModule(javaTimeModule); this.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); } }
Dalam contoh di atas, kami mencipta CustomObjectMapper yang mewarisi daripada ObjectMapper dan mendaftarkan JavaTimeModule tersuai pada objek digunakan dalam kaedah penyahserikatan dan penyahserikatan masing-masing, dan zon waktu ditetapkan kepada Asia/Shanghai. Anda juga boleh menambah kaedah bersiri masa dan penyahserilan lain seperti yang diperlukan.
Gunakan objek CustomObjectMapper tersuai dalam kod untuk penyiaran dan penyahserikatan untuk menggunakan masa Daerah Kelapan Timur. Contohnya:
CustomObjectMapper objectMapper = new CustomObjectMapper(); String jsonString = objectMapper.writeValueAsString(yourObject); YourObject deserializedObject = objectMapper.readValue(jsonString, YourObject.class);
Perlu diperhatikan bahawa jika anda perlu menggunakan ObjectMapper tersuai dalam Spring Boot, anda perlu membuat konfigurasi yang berkaitan dalam kelas konfigurasi:
@Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { return new CustomObjectMapper(); } }
Selepas konfigurasi ini, dalam kod Gunakan @Autowired untuk menyuntik objek ObjectMapper
Salah satu cara untuk menyesuaikan penyeri adalah dengan menukar masa kepada masa Daerah Kelapan Timur dan bersiri menggunakannya semasa proses. Laksanakan antara muka JsonSerializer untuk menentukan serializer dalam anotasi @JsonSerialize. Kod khusus adalah seperti berikut:
public class ChinaZoneDateTimeSerializer extends JsonSerializer<ZonedDateTime> { @Override public void serialize(ZonedDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.withZoneSameInstant(ZoneId.of("GMT+8")).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); } }
Kemudian gunakan anotasi @JsonSerialize pada medan masa objek yang perlu disiri untuk menentukan penyeri.
@JsonSerialize(using = ChinaZoneDateTimeSerializer.class) private ZonedDateTime createTime;
Kaedah ini boleh mengawal format masa dan logik penukaran dengan lebih fleksibel, tetapi ia memerlukan kod tersuai dan anotasi @JsonSerialize perlu ditambahkan pada setiap medan masa yang perlu ditukar, yang agak mengganggu. .
Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi bersiri dalam springboot di Daerah Dongba. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!