Rumah  >  Artikel  >  Java  >  Apakah cara untuk mengendalikan tarikh dalam SpringBoot?

Apakah cara untuk mengendalikan tarikh dalam SpringBoot?

PHPz
PHPzke hadapan
2023-05-16 14:58:061414semak imbas

Dalam Spring Boot, kami biasanya menggunakan Jackson untuk mensiri dan menyahsiri objek Java kepada JSON. Apabila melakukan siri tarikh, kita perlu menentukan format tarikh, jika tidak, Jackson akan menggunakan format lalai, yang mungkin bukan seperti yang kita mahu. Untuk menentukan format tarikh, terdapat dua cara:

Jika tiada pemprosesan, hasil lalai akan seperti yang ditunjukkan di bawah: Jadi kita perlu menggunakan beberapa cara untuk memproses tarikh Berikut adalah dua cara untuk menyelesaikannya ia.

Apakah cara untuk mengendalikan tarikh dalam SpringBoot?

Kaedah 1: Menggunakan anotasi (tidak disyorkan)

Kami boleh menambah @JsonFormat() pada atribut tarikh kelas entiti dan memformat kami melalui pola parameter Contoh format yang dikehendaki adalah seperti berikut:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;

Pada masa ini, bahagian hadapan akan dipaparkan mengikut format yang kami tetapkan

Apakah cara untuk mengendalikan tarikh dalam SpringBoot?

Untuk kaedah di atas, kita perlu Sangat menyusahkan untuk menambahkan anotasi @JSONFormat pada tarikh yang dipaparkan di bahagian hadapan, jadi terdapat kaedah dua Melalui pengendalian pengecualian global

Kaedah dua penukar mesej tersuai

Pertama sekali Memperkenalkan ObjectMapper dalam pakej Jackson

ObjectMapper ialah kelas dalam perpustakaan Jackson:

  • Serialize Java objects. ke dalam JSON/XML, dsb. Format;

  • Nyahsiri data dalam JSON/XML dan format lain ke dalam objek Java.

Jadi, ia adalah kunci untuk menukar objek kepada JSON/XML.

Kemudian kita boleh melakukan sesuatu dalam kelas ini,

(1) Sesuaikan format penukaran tarikh dalam pembina ----Ia adalah bersamaan dengan menukar atributnya.

(2) Konfigurasikan SpringMVC untuk tidak lagi memanggil ObjectMapper tersuai Jackson semasa membuat panggilan, dan gunakan format tersuai kami

Kami akan melaksanakannya dalam dua langkah ini

Langkah satu: Warisi ObjectMapper, gantikan pembina, sesuaikan kaedah bersiri

public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

Langkah dua: Biarkan Spring menggunakan kami Penukar mesej tersuai

Di sini kita perlu berfikir mengenainya, bagaimana kita harus menanganinya? Di mana untuk mengkonfigurasi fail Konfigurasi?

Pertama sekali, kita boleh memikirkannya, ia amat diperlukan dalam sistem adalah pemintas? pemintas mempunyai kelas konfigurasi untuk mengkonfigurasi peraturan pemintas? Jadi bolehkah kita mengkonfigurasinya di sini

binggo, ia ada di sini Apabila kita mengkonfigurasi kelas konfigurasi pemintas, kita akan mendapati bahawa kelas WebMvcConfigurationSupport mempunyai banyak kaedah. .

mempunyai protected void addInterceptors(InterceptorRegistry registry) { ... } peraturan pemintasan konfigurasi kami yang biasa digunakan

public void addResourceHandlers(ResourceHandlerRegistry registry) {... } pemprosesan sumber konfigurasi

dan sebagainya. Terdapat banyak kaedah konfigurasi kami > juga antaranya 消息转换器

protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {...}

Dengan mengkonfigurasi maklumat yang relevan dalam kaedah ini, kami boleh menukar peraturan yang ditentukan oleh Spring secara lalai dan menggunakan peraturan (komponen) kami sendiri yang ditakrifkan

Kodnya adalah seperti berikut :

@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    log.info("扩展消息转换器...");
    //创建一个消息转换器对象,注意不要导错包是Jackson2Http
    MappingJackson2HttpMessageConverter converter =  new MappingJackson2HttpMessageConverter();
    //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
    converter.setObjectMapper(new JacksonObjectMapper());
    //将自己的消息转化器加入容器中
    converters.add(0, converter);
}

  • mencipta MappingJackson2HttpMessageConverter, iaitu penukar mesej yang disepadukan dengan Jackson by Spring MVC yang boleh mensiri/menyahserialisasikan objek Java ke dalam JSON.

  • Nyatakan penggunaan JacksonObjectMapper kami untuk penukar mesej, yang digunakan untuk mensiri/menyahserialisasikan objek Java kepada JSON.

  • Tambahkan objek MappingJackson2HttpMessageConverter yang baru dibuat pada penukar senarai penukar mesej, dan tambahkannya pada kedudukan pertama, memberikannya keutamaan

Oleh kerana kami mengatasi kaedah extendMessageConverters(), Spring MVC akan memanggil kaedah ini dan menggunakan penukar mesej yang kami tambahkan. Oleh itu, MappingJackson2HttpMessageConverter yang kami tambahkan akan berkuat kuasa dan menggunakan

tersuai kami untuk mengendalikan pensirilan dan penyahsirilan antara objek dan JSON. JacksonObjectMapper()

Oleh kerana penukar mesej kami ialah penukar mesej pertama, jika pelanggan meminta untuk memulangkan data JSON, Spring MVC akan memilih penukar mesej kami untuk penyirian objek.

Oleh itu, semua tarikh dalam sistem bersiri mengikut format yang kami perlukan

Pada masa ini, data bahagian hadapan adalah format yang kami tetapkan daripada Jackson.

Memandangkan tarikh disebut, terdapat juga pemprosesan maklumat sensitif yang serupa:

Apabila kami mengembalikan data bahagian hadapan, kami mungkin melakukannya kerana reka bentuk kelas entiti, atau kami tidak mahu bahagian hadapan dapat melihat data, pada masa ini, anda perlu memproses data melalui beberapa cara, atau dua kaedah

  • Ganti nilai data sebelum kembali, panggil kaedah yang ditetapkan untuk menetapkannya kepada

    , Contohnya, setPassword(“******”)垃圾信息

  • juga boleh diselesaikan dengan menggunakan

    anotasi yang disediakan oleh Jackson dalam kelas entiti, yang mengabaikan pensirilan dan pensirilan medan. @JsonIgnore

Atas ialah kandungan terperinci Apakah cara untuk mengendalikan tarikh dalam SpringBoot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Apakah fungsi anotasi javaArtikel seterusnya:Apakah fungsi anotasi java