Rumah  >  Artikel  >  Java  >  Bagaimana SpringBoot menggunakan jackson untuk memformat masa

Bagaimana SpringBoot menggunakan jackson untuk memformat masa

WBOY
WBOYke hadapan
2023-05-25 20:34:041102semak imbas

Persediaan

Buat projek dan tambah kebergantungan

<dependency>
	<groupid>org.springframework.boot</groupid>
	<artifactid>spring-boot-starter-web</artifactid>
</dependency>

Buat kelas entiti UserDTO

Tambah atribut dan tinggalkan kaedah dapatkan dan tetapkan.

private String id;
private String username;
private Date createTime;

Buat UserController

Tulis kod lapisan kawalan

@RestController
public class UserController {
    @GetMapping("/getUser")
    public List<userdto> getUser() {
        List<userdto> userList = new ArrayList<userdto>();
        for (int i=1; i<p>Antara muka panggilan: http://localhost:8080/getUser</p>
<p><img src="https://img.php.cn/upload/article/000/887/227/168501804652134.png" alt="Bagaimana SpringBoot menggunakan jackson untuk memformat masa"></p> <p>Hasil ini jelas bukan yang kami perlukan, jadi kami perlu memformat masa. Dan ada isu zon waktu, masa saya sekarang ialah 22:44 pm. </p>
<h4>Kaedah pertama ialah menggunakan anotasi <br>
</h4>
<p> untuk menambah anotasi @JsonFormat pada medan yang perlu ditukar ini adalah milik jackson dan disepadukan dengan pakej web. </p>
<pre class="brush:php;toolbar:false">import com.fasterxml.jackson.annotation.JsonFormat;

private String id;
private String username;
 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;

corak: Format masa dan tarikh yang perlu ditukar

zon waktu: Masa ditetapkan ke Daerah Kelapan Timur untuk mengelakkan ralat masa dalam penukaran

Antara muka panggilan: http:/ /localhost:8080/getUser

Bagaimana SpringBoot menggunakan jackson untuk memformat masa

selesai, tetapi ini juga mempunyai kelemahan Jika saya mempunyai seratus entiti yang semuanya mempunyai jenis Tarikh, maka mereka mesti berada dalam satu Ratusan entiti diberi penjelasan. Nampak agak menyusahkan.

Cara kedua untuk mengubah suai konfigurasi lalai

Semua penjanaan json tidak dapat dipisahkan daripada HttpMessageConverters

SpringBoot menggunakan jackson secara lalai dan mengkonfigurasinya secara lalai . Jadi mari kita ubah suai.

Carian global untuk JacksonHttpMessageConvertersConfiguration. kekunci pintasan idea: Ctrl + shift + r

Bagaimana SpringBoot menggunakan jackson untuk memformat masa

Terdapat kaedah pemetaanJackson2HttpMessageConverter dalam kelas ini yang digunakan untuk memproses json.

@Bean
@ConditionalOnMissingBean(
	value = {MappingJackson2HttpMessageConverter.class},
	ignoredType = {"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter", "org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter"}
)
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
	return new MappingJackson2HttpMessageConverter(objectMapper);
}

Perhatikan bahawa terdapat dua anotasi pada kaedah ini dan anotasi @Bean tidak akan diperkenalkan. Memperkenalkan anotasi ConditionalOnMissingBean.

@ConditionalOnMissingBean: Apabila kacang yang diberikan tidak wujud, nyatakan kacang semasa.

Analogi: Apabila anda melaporkan diri untuk bekerja, syarikat anda akan melihat bahawa anda telah membawa komputer dan akan membenarkan anda menggunakan komputer anda sendiri, ia akan membenarkan anda menggunakan komputer syarikat . SpringBoot melakukan perkara yang sama Jika anda tidak menyediakannya, ia akan menggunakan yang lalai.

MyConfig Baharu

import java.text.SimpleDateFormat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration
public class MyConfig {

    @Bean
    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverterConfiguration() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper om = new ObjectMapper();
        //全局修改josn时间格式
        om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));
        converter.setObjectMapper(om);
        return converter;
    }
}

menyediakan Bean of MappingJackson2HttpMessageConverter, jadi Springboot akan menggunakan apa yang kami sediakan.

Anotasikan anotasi entiti Pengguna

Bagaimana SpringBoot menggunakan jackson untuk memformat masa

Panggil antara muka: http://localhost:8080/getUser

Bagaimana SpringBoot menggunakan jackson untuk memformat masa

OK, kaedah ini juga boleh.

Sediakan ObjectMapper

Anda juga boleh menyediakan ObjectMapper dan mengulas MappingJackson2HttpMessageConverter yang disediakan di atas.

import java.text.SimpleDateFormat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
@Bean
ObjectMapper objectMapper() {
	ObjectMapper om = new ObjectMapper();
	om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
	return om;
}

Antara muka panggilan: http://localhost:8080/getUser

Bagaimana SpringBoot menggunakan jackson untuk memformat masa

Nota: Kedua-dua kaedah di atas diubah suai secara global!

Pengubahsuaian fail konfigurasi ketiga

Ubah suai konfigurasi lalai dalam application.yml atau properties

yml

spring: 
  jackson: 
    date-format: yyyy/MM/dd
    timezone: GMT+8

properties

spring.jackson.date-format=yyyy-MM-dd HH:mm
spring.jackson.time-zone=GMT+8

Jika kaedah kedua dan kaedah konfigurasi ketiga wujud pada masa yang sama, kaedah kedua akan diguna pakai.

Jika ketiga-tiga kaedah wujud, format anotasi dalam kelas entiti akan menjadi yang utama.

Atas ialah kandungan terperinci Bagaimana SpringBoot menggunakan jackson untuk memformat masa. 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