Rumah > Java > javaTutorial > teks badan

Bagaimana untuk mengkonfigurasi bersiri dalam springboot di Daerah Dongba

王林
Lepaskan: 2023-05-21 20:55:26
ke hadapan
1249 orang telah melayarinya

Gunakan konfigurasi lalai SpringBoot

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
Salin selepas log masuk

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?

Kelas konfigurasi tersuai

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"));
    }
}
Salin selepas log masuk

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.

Pemeta Objek Tersuai

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"));
    }
}
Salin selepas log masuk

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);
Salin selepas log masuk

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();
    }
}
Salin selepas log masuk

Selepas konfigurasi ini, dalam kod Gunakan @Autowired untuk menyuntik objek ObjectMapper

Penyiri tersuai

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));
    }
}
Salin selepas log masuk

Kemudian gunakan anotasi @JsonSerialize pada medan masa objek yang perlu disiri untuk menentukan penyeri.

@JsonSerialize(using = ChinaZoneDateTimeSerializer.class)
private ZonedDateTime createTime;
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan