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.
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
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
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) {...}
@Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { log.info("扩展消息转换器..."); //创建一个消息转换器对象,注意不要导错包是Jackson2Http MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据 converter.setObjectMapper(new JacksonObjectMapper()); //将自己的消息转化器加入容器中 converters.add(0, converter); }
tersuai kami untuk mengendalikan pensirilan dan penyahsirilan antara objek dan JSON. JacksonObjectMapper()
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
, Contohnya, setPassword(“******”)垃圾信息
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!