日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot——LocalDateTime格式化配置

發(fā)布時間:2024/10/5 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot——LocalDateTime格式化配置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?在項目中日期格式化是最常見的問題,之前涉及的?java.util.Date 和 java.util.Calendar 類易用性差,不支持時區(qū),非線程安全,對日期的計算方式繁瑣,而且容易出錯,因為月份是從0開始的,從 Calendar 中獲取的月份需要加一才能表示當(dāng)前月份。

在 JDK8 中,一個新的重要特性就是引入了全新的時間和日期API,它被收錄在 java.time 包中,借助新的時間和日期API可以以更簡潔的方法處理時間和日期。

解決方案

1、注解

(1)?@JsonFormat和@DateTimeFormat

@JsonFormat后臺到前臺的時間格式的轉(zhuǎn)換

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

pattern:需要轉(zhuǎn)換的時間日期的格式

timezone:是時間設(shè)置為東八區(qū)

@DateTimeFormat前后到后臺的時間格式的轉(zhuǎn)換

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

pattern:需要轉(zhuǎn)換的時間日期的格式

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime dateTime;

(2)Controller

@GetMapping("date") public Object date(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime date) {return date; }@GetMapping("date2") public Object date(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {return date; }

2、統(tǒng)一配置

配置文件配置

spring:jackson:date-format: yyyy-MM-dd HH:mm:ss

代碼配置

RequestParam|PathVariable參數(shù)

Converter

@Configuration public class DateConfig {@Beanpublic Converter<String, LocalDate> localDateConverter() {return new Converter<>() {@Overridepublic LocalDate convert(String source) {return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));}};}@Beanpublic Converter<String, LocalDateTime> localDateTimeConverter() {return new Converter<>() {@Overridepublic LocalDateTime convert(String source) {return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}};}}

使用ControllerAdvice配合initBinder

@ControllerAdvice public class GlobalExceptionHandler {@InitBinderprotected void initBinder(WebDataBinder binder) {binder.registerCustomEditor(LocalDate.class, new PropertyEditorSupport() {@Overridepublic void setAsText(String text) throws IllegalArgumentException {setValue(LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd")));}});binder.registerCustomEditor(LocalDateTime.class, new PropertyEditorSupport() {@Overridepublic void setAsText(String text) throws IllegalArgumentException {setValue(LocalDateTime.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));}});binder.registerCustomEditor(LocalTime.class, new PropertyEditorSupport() {@Overridepublic void setAsText(String text) throws IllegalArgumentException {setValue(LocalTime.parse(text, DateTimeFormatter.ofPattern("HH:mm:ss")));}});} }

JSON格式

定義一個配置類,對ObjectMapper對象進行定制,指定日期類對應(yīng)的序列化與反序列化處理對象

方案一

@Configuration public class LocalDateTimeFormatConfig {private static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";@Bean@Primarypublic ObjectMapper objectMapper(){ObjectMapper objectMapper = new ObjectMapper();JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));objectMapper.registerModule(javaTimeModule);return objectMapper;} }

方案二

@Configuration public class LocalDateTimeSerializerConfig {@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")private String pattern;@Bean@Primarypublic ObjectMapper serializingObjectMapper() {ObjectMapper objectMapper = new ObjectMapper();JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());objectMapper.registerModule(javaTimeModule);return objectMapper;}public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {@Overridepublic void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)throws IOException {gen.writeString(value.format(DateTimeFormatter.ofPattern(pattern)));}}public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {@Overridepublic LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext)throws IOException {return LocalDateTime.parse(p.getValueAsString(), DateTimeFormatter.ofPattern(pattern));}} }

方案三?

/*** @Author ShenTuZhiGang* @Version 1.0.0* @Date 2020-03-29 19:23*/ @Configuration //@EnableWebMvc public class CustomWebMvcConfigurer implements WebMvcConfigurer {private static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";/*** 統(tǒng)一輸出風(fēng)格* See {@link com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy} for details.* @param converters*/@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {for (int i = 0; i < converters.size(); i++) {if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) {ObjectMapper objectMapper = new ObjectMapper();// 統(tǒng)一返回數(shù)據(jù)的輸出風(fēng)格objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategy.SnakeCaseStrategy());objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));objectMapper.registerModule(javaTimeModule);MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();converter.setObjectMapper(objectMapper);converters.set(i, converter);break;}}} }

3、自定義配置

自定義一個反序列化類

public class DateDeserializer extends JsonDeserializer<LocalDateTime> {@Overridepublic LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {if (StringUtils.isBlank(jsonParser.getText()))return null;LocalDate localDate = LocalDate.parse(jsonParser.getText(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));return LocalDateTime.of(localDate, LocalTime.MIN);} }

?字段上通過com.fasterxml.jackson.databind.annotation.JsonDeserialize注解指定使用自定義的反序列化類

@JsonDeserialize(using = DateDeserializer.class) private LocalDateTime updateTime;

4、完整配置

/*** @Author ShenTuZhiGang* @Version 1.0.0* @Date 2020-03-29 19:23*/ @Configuration //@EnableWebMvc public class CustomWebMvcConfigurer implements WebMvcConfigurer {private static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";/*** 統(tǒng)一輸出風(fēng)格* See {@link com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy} for details.* @param converters*/@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {for (int i = 0; i < converters.size(); i++) {if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) {MappingJackson2HttpMessageConverter converter = (MappingJackson2HttpMessageConverter)converters.get(i);ObjectMapper objectMapper = converter.getObjectMapper();// 統(tǒng)一返回數(shù)據(jù)的輸出風(fēng)格objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategy.SnakeCaseStrategy());objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));break;}}}/*** LocalDate轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)*/@Beanpublic Converter<String, LocalDate> localDateConverter() {return new Converter<String, LocalDate>() {@Overridepublic LocalDate convert(String source) {return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN));}};}/*** LocalDateTime轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)*/@Beanpublic Converter<String, LocalDateTime> localDateTimeConverter() {return new Converter<String, LocalDateTime>() {@Overridepublic LocalDateTime convert(String source) {return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN));}};}/*** LocalTime轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)*/@Beanpublic Converter<String, LocalTime> localTimeConverter() {return new Converter<String, LocalTime>() {@Overridepublic LocalTime convert(String source) {return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN));}};}/*** Date轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)*/@Beanpublic Converter<String, Date> dateConverter() {return new Converter<String, Date>() {@Overridepublic Date convert(String source) {SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_PATTERN);try {return format.parse(source);} catch (ParseException e) {throw new RuntimeException(e);}}};}/*** Json序列化和反序列化轉(zhuǎn)換器,用于轉(zhuǎn)換POST請求體中的json以及將我們的對象序列化為返回響應(yīng)的json*/@Beanpublic ObjectMapper objectMapper(){ObjectMapper objectMapper = new ObjectMapper();objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);//LocalDateTime系列序列化和反序列化模塊,繼承自jsr310,我們在這里修改了日期格式JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));//Date序列化和反序列化javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {@Overridepublic void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_PATTERN);String formattedDate = formatter.format(date);jsonGenerator.writeString(formattedDate);}});javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {@Overridepublic Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_PATTERN);String date = jsonParser.getText();try {return format.parse(date);} catch (ParseException e) {throw new RuntimeException(e);}}});objectMapper.registerModule(javaTimeModule);return objectMapper;}}

參考文章

LocalDateTime在spring boot中的格式化配置

Spring Boot(十二):LocalDateTime格式化處理

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") pattern:需要轉(zhuǎn)換的時間日期的格式

Spring中使用LocalDateTime、LocalDate等參數(shù)作為入?yún)?shù)據(jù)轉(zhuǎn)換問題

SpringBoot在Controller中接收LocalDate/LocalDateTime

Spring Boot LocalDateTime格式處理

Springboot - 處理LocalDateTime的入?yún)⒑统鰠⒏袷?/p>

總結(jié)

以上是生活随笔為你收集整理的Spring Boot——LocalDateTime格式化配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 六月激情网 | 日本久久高清 | 草比视频在线观看 | 欧美日韩免费一区二区三区 | 中文字幕在线观看国产 | 国产婷婷一区二区三区久久 | ass亚洲熟妇毛耸耸pics | 3d动漫精品啪啪一区二区三区免费 | 少妇高清精品毛片在线视频 | 两女双腿交缠激烈磨豆腐 | 一区二区三区精品国产 | 激情四月 | 国产日韩精品一区二区三区 | 性色国产成人久久久精品 | 久久国产视频播放 | 日本成人在线视频网站 | av片国产 | 波多野结衣一区二区三区高清av | 日韩精品一区二区三区在线视频 | 亚洲人成免费 | 精品少妇一区二区 | 日韩综合另类 | 午夜一区二区三区免费观看 | 欧美真人性野外做爰 | 一区二区视频播放 | 最新中文字幕久久 | 日韩va视频| 天天撸天天操 | 中文字幕一区二区三区夫目前犯 | 欧美精品123 | 久久久久91| 饥渴少妇色诱水电工 | 国偷自产视频一区二区久 | 三级免费黄录像 | 公妇借种乱htp109cc | 国产97免费视频 | 亚洲狼人在线 | 香蕉久久夜色精品 | 天堂中文字幕在线 | 91人人草| 久久久免费 | 99精品无码一区二区 | 日韩一区二区三区在线播放 | 亚洲欧洲精品在线 | 毛片免费视频 | 麻豆精品国产精华精华液好用吗 | 色综合日韩| gai免费观看网站外网 | 国产乱码精品一区二区三区忘忧草 | 被灌满精子的波多野结衣 | 精品亚洲永久免费精品 | 91av观看| 一区二区在线观看av | 日本乱码一区 | 一级黄色免费片 | 91视频看片| 久久久精彩视频 | 日本中文字幕在线免费观看 | 婷婷丁香在线 | 六月婷婷激情 | 操www| 在线视频久 | 丰满人妻一区二区三区免费视频棣 | 欧美绿帽合集videosex | 国产精品白虎 | 在线观看中出 | 亚洲av无码精品一区二区 | 波多野结衣中文字幕在线播放 | 性色在线观看 | 午夜小视频在线观看 | 欧美一区不卡 | 精品国产一区二区三区久久 | 国产www网站| 三区在线观看 | 淫综合网 | 黄色在线观看视频网站 | 六月婷婷在线 | 涩涩片影院 | 波多野结衣简介 | 欧美日韩一区二区在线观看视频 | 久久九九热 | 素人一区 | 欧美成人午夜视频 | 国产精品一二三级 | 国产黄色大片网站 | 狠狠操一区二区 | 秋霞精品 | 日韩精品中文字幕在线播放 | 青在线视频 | 国产成人三级在线观看视频 | 亚洲不卡网 | 少妇激情在线 | 在线a天堂 | 一区二区三区少妇 | 国产无套粉嫩白浆内谢 | 亚洲av成人无码久久精品 | 中国少妇无码专区 | 伊人网五月天 | 91免费污视频 |