{"id":3050,"date":"2023-08-28T10:09:55","date_gmt":"2023-08-28T02:09:55","guid":{"rendered":"https:\/\/xinchewhd.com.cn\/?p=3050"},"modified":"2023-08-28T10:09:55","modified_gmt":"2023-08-28T02:09:55","slug":"springboot-%e9%85%8d%e7%bd%ae%e5%85%a8%e5%b1%80%e6%97%a5%e6%9c%9f%e6%a0%bc%e5%bc%8f%e8%bd%ac%e6%8d%a2%e5%99%a8%ef%bc%8c%e4%b8%80%e6%ac%a1%e6%80%a7%e6%90%9e%e5%ae%9a%ef%bc%81","status":"publish","type":"post","link":"https:\/\/xinchewhd.com.cn\/index.php\/spring-boot\/springboot-%e9%85%8d%e7%bd%ae%e5%85%a8%e5%b1%80%e6%97%a5%e6%9c%9f%e6%a0%bc%e5%bc%8f%e8%bd%ac%e6%8d%a2%e5%99%a8%ef%bc%8c%e4%b8%80%e6%ac%a1%e6%80%a7%e6%90%9e%e5%ae%9a%ef%bc%81\/","title":{"rendered":"SpringBoot \u914d\u7f6e\u5168\u5c40\u65e5\u671f\u683c\u5f0f\u8f6c\u6362\u5668\uff0c\u4e00\u6b21\u6027\u641e\u5b9a\uff01"},"content":{"rendered":"<p style=\"text-align: left;\">1. SpringBoot\u8bbe\u7f6e\u540e\u53f0\u5411\u524d\u53f0\u4f20\u9012Date\u65e5\u671f\u683c\u5f0f \u5728springboot\u5e94\u7528\u4e2d\uff0c@RestController\u6ce8\u89e3\u7684json\u9ed8\u8ba4\u5e8f\u5217\u5316\u4e2d\uff0c\u65e5\u671f\u683c\u5f0f\u9ed8\u8ba4\u4e3a\uff1a2020-12-03T15:12:26.000+00:00\u7c7b\u578b\u7684\u663e\u793a\u3002 \u5728\u5b9e\u9645\u663e\u793a\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5176\u8f6c\u6362\u6210\u6211\u4eec\u9700\u8981\u7684\u663e\u793a\u683c\u5f0f\u3002 1.1 \u65b9\u5f0f1\uff1a\u914d\u7f6e\u6587\u4ef6\u4fee\u6539 \u914d\u7f6e\u6587\u4ef6\u914d\u7f6eapplication.yml\uff1a spring: # \u914d\u7f6e\u65e5\u671f\u683c\u5f0f\u5316 jackson: date-format: yyyy-MM-dd HH:mm:ss #\u65f6\u95f4\u6233\u7edf\u4e00\u8f6c\u6362\u4e3a\u6307\u5b9a\u683c\u5f0f time-zone: GMT+8 # \u65f6\u533a\u4fee\u6539\u4e3a\u4e1c8\u533a application.properties\u914d\u7f6e\u65b9\u5f0f spring.jackson.date-format=yyyy-MM-dd HH:mm:ss #\u65f6\u95f4\u6233\u7edf\u4e00\u8f6c\u6362\u4e3a\u6307\u5b9a\u683c\u5f0fspring.jackson.time-zone=GMT+8 # \u65f6\u533a\u4fee\u6539\u4e3a\u4e1c8\u533a \u3010\u6ce8\u610f\u3011\u8fd9\u91cc\u9700\u8981\u4fee\u6539\u65f6\u533atime-zone\uff1a\u6570\u636e\u5e93\u9ed8\u8ba4\u65f6\u533a\u662f\u683c\u6797\u5c3c\u6cbb\u7684\u65f6\u95f4\uff0c\u5982\u679c\u4e0d\u8bbe\u7f6e\uff0c\u4f1a\u6bd4\u5b9e\u9645\u65f6\u95f4\u5c118\u4e2a\u5c0f\u65f6\uff08\u5317\u4eac\u65f6\u95f4\uff09\u3002 1.2 \u65b9\u5f0f2\uff1a\u5728javabean\u5b9e\u4f53\u7c7b\u4e0a\u52a0\u6ce8\u89e3 I. @JsonFormat\u6ce8\u89e3 @JsonFormat\u6ce8\u89e3\u7528\u4e8e\u5c5e\u6027\u6216\u65b9\u6cd5\u4e0a\uff0c\u5c06Date\u7c7b\u578b\u8f6c\u6362\u4e3a\u6211\u4eec\u9700\u8981\u7684\u7c7b\u578b\u663e\u793a\u3002 \/\/\u5728pattern\u4e0a\u8bbe\u7f6e\u81ea\u5df1\u9700\u8981\u7684\u683c\u5f0f@JsonFormat(pattern=\"yyyy-MM-dd HH:mm:ss\")private Date createTime; II. @DateTimeFormat\u6ce8\u89e3 \u5728\u9700\u8981\u8fdb\u884c\u65e5\u671f\u683c\u5f0f\u8f6c\u6362\u7684Date\u5c5e\u6027\u4e0a\u6dfb\u52a0\u6ce8\u89e3@DateTimeFormat(pattern = \"\u9700\u8981\u8f6c\u6362\u7684\u683c\u5f0f\") \/\/\u6ce8\u89e3\u5c06yyyy-MM-dd\u7684\u5f62\u5f0f\u8f6c\u6362\u4e3aDate\u6570\u636e@DateTimeFormat(pattern = \"yyyy-MM-dd HH:mm:ss\")private Date birthday; III. @Temporal\u6ce8\u89e3 \u901a\u8fc7@Temporal\u6ce8\u89e3\uff0c\u5b9e\u73b0\u65e5\u671f\u683c\u5f0f\u8f6c\u6362\uff0c\u5b83\u81ea\u5e26\u5c5e\u6027\u53c2\u6570\uff0c\u6bd4\u5982\uff1a @Temporal(TemporalType.TIMESTAMP)private Date createTime; 2. SpringBoot\u914d\u7f6e\u5168\u5c40\u65e5\u671f\u683c\u5f0f\u8f6c\u6362\u5668 \u914d\u7f6e\u4ece\u9875\u9762\u63a5\u6536\u7684String\u548cjson\u683c\u5f0f\u7684\u65e5\u671f\u8f6c\u6362\u4e3aDate\u7c7b\u578b\u3002 2.1 \u914d\u7f6eString\u7c7b\u578b\u8868\u5355\u4f20\u53c2\u8f6cDate\u7684\u8f6c\u6362\u5668 import org.springframework.core.convert.converter.Converter;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;\/\/Converter&lt;S,T&gt; S: \u4ee3\u8868\u7684\u662f\u6e90,\u5c06\u8981\u8f6c\u6362\u7684\u6570\u636e\u7c7b\u578b T:\u76ee\u6807\u7c7b\u578b,\u5c06\u4f1a\u8f6c\u6210\u4ec0\u4e48\u6570\u636e\u7c7b\u578b@Componentpublic class GlobalFormDateConvert implements Converter&lt;String, Date&gt; { \/\/\u9759\u6001\u521d\u59cb\u5316\u5b9a\u4e49\u65e5\u671f\u5b57\u7b26\u4e32\u53c2\u6570\u5217\u8868\uff08\u9700\u8981\u8f6c\u6362\u7684\uff09 private static final List&lt;String&gt; paramList = new ArrayList&lt;&gt;(); \/\/\u9759\u6001\u521d\u59cb\u5316\u53ef\u80fd\u521d\u590f\u4f60\u7684\u65e5\u671f\u683c\u5f0f private static final String param1 = \"yyyy-MM\"; private static final String param2 = \"yyyy-MM-dd\"; private static final String param3 = \"yyyy-MM-dd HH:mm\"; private static final String param4 = \"yyyy-MM-dd HH:mm:ss\"; \/\/\u9759\u6001\u4ee3\u7801\u5757\uff0c\u5c06\u65e5\u671f\u53c2\u6570\u52a0\u5165\u5230\u5217\u8868\u4e2d static { paramList.add(param1); paramList.add(param2); paramList.add(param3); paramList.add(param4); } \/\/\u81ea\u5b9a\u4e49\u51fd\u6570\uff0c\u5c06\u5b57\u7b26\u4e32\u8f6cDate \u53c21\uff1a\u4f20\u5165\u7684\u65e5\u671f\u5b57\u7b26\u4e32 \u53c22\uff1a\u683c\u5f0f\u53c2\u6570 public Date parseDate(String source, String format) { System.out.println(\"parseDate\u8f6c\u6362\u65e5\u671f\"); Date date = null; try { \/\/\u65e5\u671f\u683c\u5f0f\u8f6c\u6362\u5668 DateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(source); } catch (Exception e) { e.printStackTrace(); } return date; } \/\/convert\u8f6c\u6362\u65b9\u6cd5 \uff0cs\u662f\u5c06\u4f1a\u4f20\u9012\u8fc7\u6765\u7684\u65e5\u671f\u7684\u5b57\u7b26\u4e32 @Override public Date convert(String source) { System.out.println(\"convert\u65e5\u671f\u683c\u5f0f\u8f6c\u6362\u5668\"); if(StringUtils.isEmpty(source)){ return null; } source = source.trim(); \/\/\u53bb\u9664\u9996\u5c3e\u7a7a\u683c DateFormat dateFormat = new SimpleDateFormat(param1); \/\/\u6b63\u5219\u8868\u8fbe\u5f0f\u5224\u65ad\u662f\u54ea\u4e00\u79cd\u683c\u5f0f\u53c2\u6570 if (source.matches(\"^\\\\d{4}-\\\\d{1,2}$\")) { return parseDate(source, paramList.get(0)); } else if (source.matches(\"^\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}$\")) { return parseDate(source, paramList.get(1)); } else if (source.matches(\"^\\\\d{4}-\\\\d{1,2}-\\\\d{1,2} {1}\\\\d{1,2}:\\\\d{1,2}$\")) { return parseDate(source, paramList.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, paramList.get(3)); } else { throw new IllegalArgumentException(\"\u8fd8\u672a\u5b9a\u4e49\u8be5\u79cd\u5b57\u7b26\u4e32\u8f6cDate\u7684\u65e5\u671f\u8f6c\u6362\u683c\u5f0f --&gt; \u3010\u65e5\u671f\u683c\u5f0f\u3011\uff1a\" + source); } }} 2.2 \u914d\u7f6eJson\u6570\u636e\u8f6cDate\u7684\u5168\u5c40\u65e5\u671f\u8f6c\u6362\u5668 import java.text.FieldPosition;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Date;import com.fasterxml.jackson.databind.util.StdDateFormat;import org.springframework.util.StringUtils;public class GlobalJsonDateConvert extends StdDateFormat { \/\/\u9759\u6001\u521d\u59cb\u5316final\uff0c\u5171\u4eab public static final GlobalJsonDateConvert instance = new GlobalJsonDateConvert(); \/\/\u8986\u76d6parse(String)\u8fd9\u4e2a\u65b9\u6cd5\u5373\u53ef\u5b9e\u73b0 @Override public Date parse(String dateStr, ParsePosition pos) { return getDate(dateStr, pos); } @Override public Date parse(String dateStr) { ParsePosition pos = new ParsePosition(0); return getDate(dateStr, pos); } private Date getDate(String dateStr, ParsePosition pos) { System.out.println(\"json\u683c\u5f0f\u65e5\u671f\u8f6c\u6362\"); SimpleDateFormat sdf = null; if (StringUtils.isEmpty(dateStr)) { return null; } else if (dateStr.matches(\"^\\\\d{4}-\\\\d{1,2}$\")) { sdf = new SimpleDateFormat(\"yyyy-MM\"); return sdf.parse(dateStr, pos); } else if (dateStr.matches(\"^\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}$\")) { sdf = new SimpleDateFormat(\"yyyy-MM-dd\"); return sdf.parse(dateStr, pos); } else if (dateStr.matches(\"^\\\\d{4}-\\\\d{1,2}-\\\\d{1,2} {1}\\\\d{1,2}:\\\\d{1,2}$\")) { sdf = new SimpleDateFormat(\"yyyy-MM-dd HH:mm\"); return sdf.parse(dateStr, pos); } else if (dateStr.matches(\"^\\\\d{4}-\\\\d{1,2}-\\\\d{1,2} {1}\\\\d{1,2}:\\\\d{1,2}:\\\\d{1,2}$\")) { sdf = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\"); return sdf.parse(dateStr, pos); } else if (dateStr.length() == 23) { sdf = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss.SSS\"); return sdf.parse(dateStr, pos); } return super.parse(dateStr, pos); } @Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){ SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\"); return sdf.format(date, toAppendTo, fieldPosition); } @Override public GlobalJsonDateConvert clone() { return new GlobalJsonDateConvert(); }} 2.3 \u914d\u7f6ebean\u4ea4\u7ed9Spring\u7ba1\u7406 import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.databind.ObjectMapper;import com.xgf.online_mall.convert.GlobalFormDateConvert;import com.xgf.online_mall.convert.GlobalJsonDateConvert;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.ConversionServiceFactoryBean;import org.springframework.core.convert.ConversionService;import org.springframework.core.convert.converter.Converter;import org.springframework.http.MediaType;import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;import java.util.ArrayList;import java.util.List;import java.util.HashSet;import java.util.Set;@Configurationpublic class WebConfig { \/\/JSON\u683c\u5f0f \u5168\u5c40\u65e5\u671f\u8f6c\u6362\u5668\u914d\u7f6e @Bean public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); \/\/\u8bbe\u7f6e\u65e5\u671f\u683c\u5f0f ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(GlobalJsonDateConvert.instance); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper); \/\/\u8bbe\u7f6e\u4e2d\u6587\u7f16\u7801\u683c\u5f0f List&lt;MediaType&gt; list = new ArrayList&lt;MediaType&gt;(); list.add(MediaType.APPLICATION_JSON_UTF8); mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list); return mappingJackson2HttpMessageConverter; } \/\/\u8868\u5355\u683c\u5f0f \u5168\u5c40\u65e5\u671f\u8f6c\u6362\u5668 @Bean @Autowired public ConversionService getConversionService(GlobalFormDateConvert globalDateConvert){ ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean(); Set&lt;Converter&gt; converters = new HashSet&lt;&gt;(); converters.add(globalDateConvert); factoryBean.setConverters(converters); return factoryBean.getObject(); }}<\/p>\n<p style=\"text-align: left;\">\u6765\u6e90\uff1astriveday.blog.csdn.net\/ article\/details\/110632544<\/p>\n<p><\/p>\n<p>\u672c\u7bc7\u6587\u7ae0\u6765\u6e90\u4e8e\u5fae\u4fe1\u516c\u4f17\u53f7\uff1a\u4f5c\u8005\uff1aJava\u9762\u8bd5\u9898\u7cbe\u9009 Java\u9762\u8bd5\u9898\u7cbe\u9009 \u5fae\u4fe1\u53f7 code_watch \u529f\u80fd\u4ecb\u7ecd \u7cbe\u9009\u5e38\u89c1\u7684Java\u9762\u8bd5\u9898\u3001\u6280\u672f\u77e5\u8bc6\u70b9\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u67e5\u7f3a\u8865\u6f0f\u3002 \u53d1\u8868\u4e8e<br \/>\u8f6c\u8f7d\u5730\u5740\uff1ahttps:\/\/mp.weixin.qq.com\/s\/5SqndI9MpaPBWf39CLwh4g<\/p>\n","raw":"","protected":false},"excerpt":{"rendered":"<p>1. SpringBoot\u8bbe\u7f6e\u540e\u53f0\u5411\u524d\u53f0\u4f20\u9012Date\u65e5\u671f\u683c\u5f0f \u5728springboot\u5e94\u7528\u4e2d\uff0c@RestController\u6ce8\u89e3\u7684j &#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-3050","post","type-post","status-publish","format-standard","hentry","category-spring-boot"],"post_thumbnail_image":"","content_first_image":null,"post_medium_image_300":"","post_thumbnail_image_624":"","post_frist_image":null,"post_medium_image":"","post_large_image":"","post_full_image":"","post_all_images":[],"videoAdId":"","listAd":"0","listAdId":"","listAdEvery":6,"total_comments":0,"category_name":"Spring Boot","post_date":"2023-08-28","like_count":"0","praiseWord":"\u9f13\u52b1","copyright_state":"","excitationAd":"0","rewardedVideoAdId":"","detailAdId":"","detailAd":"0","enterpriseMinapp":"0","audios":[],"postImageUrl":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230519082947553.jpg","avatarurls":[],"related_posts":null,"pageviews":802,"next_post_id":3088,"next_post_title":"10\u4e2a\u4e0d\u53ef\u4e0d\u77e5\u7684Spring Boot\u6ce8\u91ca\u65b9\u6cd5","previous_post_id":3054,"previous_post_title":"\u4e00\u4e2a\u6ce8\u89e3\u4f18\u96c5\u7684\u5b9e\u73b0Redisson\u5206\u5e03\u5f0f\u9501","_links":{"self":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts\/3050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/comments?post=3050"}],"version-history":[{"count":0,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts\/3050\/revisions"}],"wp:attachment":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/media?parent=3050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/categories?post=3050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/tags?post=3050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}