国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - 解決Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問題

解決Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問題

2021-04-12 09:15Java之家 JAVA教程

這篇文章主要介紹了解決Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問題,需要的朋友可以參考下

LocalDate 、 LocalTime 、 LocalDateTime 是Java 8開始提供的時間日期API,主要用來優化Java 8以前對于時間日期的處理操作。然而,我們在使用Spring Boot或使用Spring Cloud Feign的時候,往往會發現使用請求參數或返回結果中有 LocalDate 、 LocalTime 、 LocalDateTime 的時候會發生各種問題。本文我們就來說說這種情況下出現的問題,以及如何解決。

問題現象

先來看看癥狀。比如下面的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
  @RestController
  class HelloController {
    @PostMapping("/user")
    public UserDto user(@RequestBody UserDto userDto) throws Exception {
      return userDto;
    }
  }
  @Data
  @NoArgsConstructor
  @AllArgsConstructor
  static class UserDto {
    private String userName;
    private LocalDate birthday;
  }
}

上面的代碼構建了一個簡單的Spring Boot Web應用,它提供了一個提交用戶信息的接口,用戶信息中包含了 LocalDate 類型的數據。此時,如果我們使用Feign來調用這個接口的時候,會得到如下錯誤:

?
1
2
2018-03-13 09:22:58,445 WARN [http-nio-9988-exec-3] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not construct instance of java.time.LocalDate: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.time.LocalDate: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: java.io.PushbackInputStream@67064c65; line: 1, column: 63] (through reference chain: java.util.ArrayList[0]->com.didispace.UserDto["birthday"])

分析解決

對于上面的錯誤信息 JSON parse error: Can not construct instance of java.time.LocalDate: no suitable constructor found, can not deserialize from Object value ,熟悉Spring MVC的童鞋應該馬上就能定位錯誤與 LocalDate 的反序列化有關。但是,依然會有很多讀者會被這段錯誤信息 java.util.ArrayList[0]->com.didispace.UserDto["birthday"] 所困惑。我們命名提交的 UserDto["birthday"] 是個 LocalDate 對象嘛,跟 ArrayList 列表對象有啥關系呢?

我們不妨通過postman等手工發一個請求看看服務端返回的是什么?比如你可以按下圖發起一個請求:

解決Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問題

從上圖中我們就可以理解上面我所提到的困惑了,實際上默認情況下Spring MVC對于 LocalDate 序列化成了一個數組類型,而Feign在調用的時候,還是按照 ArrayList 來處理,所以自然無法反序列化為 LocalDate 對象了。

解決方法

為了解決上面的問題非常簡單,因為jackson也為此提供了一整套的序列化方案,我們只需要在 pom.xml 中引入 jackson-datatype-jsr310 依賴,具體如下:

?
1
2
3
4
<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

注意:在設置了spring boot的parent的情況下不需要指定具體的版本,也不建議指定某個具體版本

在該模塊中封裝對Java 8的時間日期API序列化的實現,其具體實現在這個類中: com.fasterxml.jackson.datatype.jsr310.JavaTimeModule (注意:一些較早版本瘋轉在這個類中“ com.fasterxml.jackson.datatype.jsr310.JSR310Module )。在配置了依賴之后,我們只需要在上面的應用主類中增加這個序列化模塊,同時開啟標準的 ISO 8601 格式:

?
1
2
3
4
5
6
7
@Bean
public ObjectMapper serializingObjectMapper() {
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  objectMapper.registerModule(new JavaTimeModule());
  return objectMapper;
}

此時,我們在訪問剛才的接口,就不再是數組類型了,同時對于Feign客戶端的調用也不會再出現上面的錯誤了。

代碼示例

本文的相關例子可以查看下面倉庫中的 Chapter3-1-7 目錄:

Github:https://github.com/dyc87112/SpringBoot-Learning

Gitee:https://gitee.com/didispace/SpringBoot-Learning

總結

以上所述是小編給大家介紹的解決Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产黄大片 | 久久久久久久一区 | 久久久精品国产 | 欧美精品| 色欧美日韩| 久久久久中文字幕 | 神马影院一区二区三区 | 久久国产一区二区 | 日韩视频专区 | 久久99精品久久久 | 人人射人人舔 | 久久视频精品 | 中文字幕在线精品 | 欧美精品成人 | 亚洲毛片网站 | 免费在线一区二区 | 荷兰欧美一级毛片 | 欧美日韩日本国产 | 国产日韩一区二区 | 欧美一区二区三区免费观看视频 | 亚洲三级在线 | 午夜视频网 | 美女毛片 | 中文字幕精品一区 | 久久久91精品国产一区二区三区 | 亚洲电影在线播放 | 欧美激情一区二区三级高清视频 | 日本三级中文在线电影 | 国产综合精品一区二区三区 | 国产精品视频成人 | 精品国产乱码久久久久久闺蜜 | 2018自拍偷拍 | 亚洲激情精品 | 国产精品网站在线观看 | 久久精品亚洲 | 中国久久久 | 国产精品久久国产精品 | 国产在线91 | 999精品视频 | 日韩资源 | 日韩欧美网站 |