這篇文章主要講解了“SpringBoot如何使用Jackson返回JSON數(shù)據(jù)日期格式化”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“SpringBoot如何使用Jackson返回JSON數(shù)據(jù)日期格式化”吧!
成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
@Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); // 通過該方法對(duì)mapper對(duì)象進(jìn)行設(shè)置,所有序列化的對(duì)象都將按改規(guī)則進(jìn)行系列化 // Include.Include.ALWAYS 默認(rèn) // Include.NON_DEFAULT 屬性為默認(rèn)值不序列化 // Include.NON_EMPTY 屬性為 空("") 或者為 NULL 都不序列化,則返回的json是沒有這個(gè)字段的。這樣對(duì)移動(dòng)端會(huì)更省流量 // Include.NON_NULL 屬性為NULL 不序列化 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 允許出現(xiàn)特殊字符和轉(zhuǎn)義符 objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); // 允許出現(xiàn)單引號(hào) objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); // 字段保留,將null值轉(zhuǎn)為"" objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer
spring: jackson: #日期格式化 date-format: yyyy-MM-dd HH:mm:ss serialization: #格式化輸出 indent_output: true #忽略無法轉(zhuǎn)換的對(duì)象 fail_on_empty_beans: false #設(shè)置空如何序列化 defaultPropertyInclusion: NON_EMPTY deserialization: #允許對(duì)象忽略json中不存在的屬性 fail_on_unknown_properties: false parser: #允許出現(xiàn)特殊字符和轉(zhuǎn)義符 allow_unquoted_control_chars: true #允許出現(xiàn)單引號(hào) allow_single_quotes: true
/** * 測(cè)試日期 * @param joinDay * @return */ @RequestMapping("date") public Date testDate(Date joinDay){ return joinDay; } package com.streamyear.course.config; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 全局頁面?zhèn)魅肴掌谧址詣?dòng)轉(zhuǎn)換成日期格式 */ @Component public class DateConverterConfig implements Converter{ private static final List formarts = new ArrayList<>(4); static{ formarts.add("yyyy-MM"); formarts.add("yyyy-MM-dd"); formarts.add("yyyy-MM-dd hh:mm"); formarts.add("yyyy-MM-dd hh:mm:ss"); } @Override public Date convert(String source) { String value = source.trim(); if ("".equals(value)) { return null; } if(source.matches("^\\d{4}-\\d{1,2}$")){ return parseDate(source, formarts.get(0)); }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){ return parseDate(source, formarts.get(1)); }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){ return parseDate(source, formarts.get(2)); }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){ return parseDate(source, formarts.get(3)); }else { throw new IllegalArgumentException("Invalid boolean value '" + source + "'"); } } /** * 格式化日期 * @param dateStr String 字符型日期 * @param format String 格式 * @return Date 日期 */ public Date parseDate(String dateStr, String format) { Date date=null; try { DateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(dateStr); } catch (Exception e) { } return date; } }
@Configuration public class JacksonConfiguration { @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); // 忽略json字符串中不識(shí)別的屬性 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略無法轉(zhuǎn)換的對(duì)象 “No serializer found for class com.xxx.xxx” objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // NULL不參與序列化 // objectMapper.setSerializationInclusion(Include.NON_NULL); // PrettyPrinter 格式化輸出 objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); // 指定時(shí)區(qū),默認(rèn) UTC,而不是 jvm 默認(rèn)時(shí)區(qū) objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); // 日期類型處理 objectMapper.setDateFormat(new SimpleDateFormat(DateUtil.DEFAULT_FORMAT_DATETIME)); converter.setObjectMapper(objectMapper); return converter; } /** * BeanPostProcessor 的便捷實(shí)現(xiàn),以便對(duì)帶注解的方法上執(zhí)行方法級(jí)別的校驗(yàn) * 注意:需要在目標(biāo)類上室友 @Validated 注解進(jìn)行注釋,以便搜索其內(nèi)聯(lián)約束注釋的方法 * A convenient BeanPostProcessor implementation * that delegates to a JSR-303 provider for performing method-level validation on annotated methods * @return */ @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); } }
感謝各位的閱讀,以上就是“SpringBoot如何使用Jackson返回JSON數(shù)據(jù)日期格式化”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)SpringBoot如何使用Jackson返回JSON數(shù)據(jù)日期格式化這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!