Rumah >Java >javaTutorial >Bagaimana SpringBoot menggunakan jackson untuk memformat masa
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
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.
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
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
Panggil antara muka: http://localhost:8080/getUser
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
Nota: Kedua-dua kaedah di atas diubah suai secara global!
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!