最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年03月14日 09:06:17   投稿:mrr  
這篇文章主要介紹了解決Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問題,需要的朋友可以參考下

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

問題現(xiàn)象

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

@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 類型的數(shù)據(jù)。此時,如果我們使用Feign來調(diào)用這個接口的時候,會得到如下錯誤:

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等手工發(fā)一個請求看看服務端返回的是什么?比如你可以按下圖發(fā)起一個請求:

 

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

解決方法

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

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

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

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

@Bean
public ObjectMapper serializingObjectMapper() {
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  objectMapper.registerModule(new JavaTimeModule());
  return objectMapper;
}

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

代碼示例

本文的相關例子可以查看下面?zhèn)}庫中的 Chapter3-1-7 目錄:

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

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

總結

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

相關文章

  • 詳解Redis 緩存 + Spring 的集成示例

    詳解Redis 緩存 + Spring 的集成示例

    本篇文章主要介紹了Redis 緩存 + Spring 的集成示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • SpringBoot Aop 詳解和多種使用場景解析

    SpringBoot Aop 詳解和多種使用場景解析

    aop面向切面編程,是編程中一個很重要的思想本篇文章主要介紹的是SpringBoot切面Aop的使用和案例,對SpringBoot Aop相關知識感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • SpringBoot本地磁盤映射問題

    SpringBoot本地磁盤映射問題

    這篇文章主要介紹了SpringBoot本地磁盤映射問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java設計模式之策略模式_動力節(jié)點Java學院整理

    Java設計模式之策略模式_動力節(jié)點Java學院整理

    策略模式是對算法的封裝,把一系列的算法分別封裝到對應的類中,并且這些類實現(xiàn)相同的接口,相互之間可以替換。接下來通過本文給大家分享Java設計模式之策略模式,感興趣的朋友一起看看吧
    2017-08-08
  • IDEA項目中配置Maven鏡像源(下載源)的詳細過程

    IDEA項目中配置Maven鏡像源(下載源)的詳細過程

    Maven是一個能使我們的java程序開發(fā)節(jié)省時間和精力,是開發(fā)變得相對簡單,還能使開發(fā)規(guī)范化的工具,下面這篇文章主要給大家介紹了關于IDEA項目中配置Maven鏡像源(下載源)的詳細過程,需要的朋友可以參考下
    2024-02-02
  • SpringBoot實現(xiàn)分庫分表

    SpringBoot實現(xiàn)分庫分表

    這篇文章主要介紹了SpringBoot實現(xiàn)分庫分表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實現(xiàn)TCP/IP協(xié)議的收發(fā)數(shù)據(jù)(服務端)代碼實例

    Java實現(xiàn)TCP/IP協(xié)議的收發(fā)數(shù)據(jù)(服務端)代碼實例

    這篇文章主要介紹了Java實現(xiàn)TCP/IP協(xié)議的收發(fā)數(shù)據(jù)(服務端)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java Junit單元測試實例詳解

    Java Junit單元測試實例詳解

    在本篇文章里小編給大家分享的是關于Java Junit單元測試的相關知識點內(nèi)容,有興趣的朋友們學習下。
    2019-11-11
  • 關于Spring Cloud 本地屬性覆蓋的問題

    關于Spring Cloud 本地屬性覆蓋的問題

    這篇文章主要介紹了關于Spring Cloud 本地屬性覆蓋的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java中out.print和out.write的方法

    java中out.print和out.write的方法

    本文用一個小例子說明java out.print和out.write的方法,大家參考使用吧
    2013-11-11

最新評論

兴城市| 容城县| 长春市| 台江县| 师宗县| 台江县| 岢岚县| 深圳市| 涿鹿县| 蓝山县| 平乡县| 潮安县| 中阳县| 安远县| 施秉县| 丰台区| 会理县| 武邑县| 新化县| 沁源县| 临汾市| 收藏| 永仁县| 天气| 福州市| 祁东县| 湘潭市| 成都市| 六枝特区| 益阳市| 广汉市| 长汀县| 仁布县| 申扎县| 康平县| 都匀市| 石首市| 法库县| 鹰潭市| 新河县| 明光市|