日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot整合OpenFeign的坑

瀏覽:153日期:2023-02-25 14:23:47
目錄項(xiàng)目集成OpenFegin集成OpenFegin依賴實(shí)現(xiàn)遠(yuǎn)程調(diào)用解決問題問題描述問題分析問題解決

最近,在使用SpringBoot+K8S開發(fā)微服務(wù)系統(tǒng),既然使用了K8S,我就不想使用SpringCloud了。為啥,因?yàn)镵8S本身的就提供了非常6的服務(wù)注冊(cè)與發(fā)現(xiàn)、限流、熔斷、負(fù)載均衡等等微服務(wù)需要使用的技術(shù),那我為啥還要接入SpringCloud呢?額,說(shuō)了這么多,在真正使用SpringBoot+K8S這一套技術(shù)棧的時(shí)候,也會(huì)遇到一些問題,比如我不需要使用SpringCloud時(shí),調(diào)用其他服務(wù)時(shí),我使用的是原生的OpenFegin,在使用OpenFegin調(diào)用其他服務(wù)的時(shí)候,就遇到了一個(gè)大坑。通過(guò)OpenFeign請(qǐng)求返回值LocalDateTime發(fā)生了異常,今天,我們就來(lái)說(shuō)說(shuō)這個(gè)坑!

項(xiàng)目集成OpenFegin集成OpenFegin依賴

首先,我先跟大家說(shuō)下項(xiàng)目的配置,整體項(xiàng)目使用的SpringBoot版本為2.2.6,原生的OpenFegin使用的是11.0,我們通過(guò)如下方式在pom.xml中引入OpenFegin。

<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <skip_maven_deploy>false</skip_maven_deploy> <java.version>1.8</java.version> <openfegin.version>11.0</openfegin.version></properties><dependencies> <dependency><groupId>io.github.openfeign</groupId><artifactId>feign-core</artifactId><version>${openfegin.version}</version> </dependency> <dependency><groupId>io.github.openfeign</groupId><artifactId>feign-jackson</artifactId><version>${openfegin.version}</version> </dependency></dependencies>

這里,我省略了一些其他的配置項(xiàng)。

接下來(lái),我就開始在我的項(xiàng)目中使用OpenFegin調(diào)用遠(yuǎn)程服務(wù)了。具體步驟如下。

實(shí)現(xiàn)遠(yuǎn)程調(diào)用

首先,創(chuàng)建OpenFeignConfig類,配置OpenFegin默認(rèn)使用的Contract。

@Configurationpublic class OpenFeignConfig { @Bean public Contract useFeignAnnotations() { return new Contract.Default(); }}

接下來(lái),我們寫一個(gè)通用的獲取OpenFeign客戶端的工廠類,這個(gè)類也比較簡(jiǎn)單,本質(zhì)上就是以一個(gè)HashMap來(lái)緩存所有的FeginClient,這個(gè)的FeginClient本質(zhì)上就是我們自定義的Fegin接口,緩存中的Key為請(qǐng)求連接的基礎(chǔ)URL,緩存的Value就是我們定義的FeginClient接口。

public class FeginClientFactory { /** * 緩存所有的Fegin客戶端 */ private volatile static Map<String, Object> feginClientCache = new HashMap<>(); /** * 從Map中獲取數(shù)據(jù) * @return */ @SuppressWarnings('unchecked') public static <T> T getFeginClient(Class<T> clazz, String baseUrl){ if(!feginClientCache.containsKey(baseUrl)) { synchronized (FeginClientFactory.class) { if(!feginClientCache.containsKey(baseUrl)) { T feginClient = Feign.builder().decoder(new JacksonDecoder()).encoder(new JacksonEncoder()).target(clazz, baseUrl); feginClientCache.put(baseUrl, feginClient); } } } return (T)feginClientCache.get(baseUrl); }}

接下來(lái),我們就定義一個(gè)FeginClient接口。

public interface FeginClientProxy { @Headers('Content-Type:application/json;charset=UTF-8') @RequestLine('POST /user/login') UserLoginVo login(UserLoginVo loginVo);}

接下來(lái),我們創(chuàng)建SpringBoot的測(cè)試類。

@RunWith(SpringRunner.class)@SpringBootTestpublic class IcpsWeightStarterTest { @Test public void testUserLogin() { ResponseMessage result = FeginClientFactory.getFeginClient(FeginClientProxy.class, 'http://127.0.0.1').login(new UserLoginVo('zhangsan', '123456', 1)); System.out.println(JsonUtils.bean2Json(result)); }}

一切準(zhǔn)備就緒,運(yùn)行測(cè)試。麻蛋,出問題了。主要的問題就是通過(guò)OpenFeign請(qǐng)求返回值LocalDateTime字段會(huì)發(fā)生異常!!!

注:此時(shí)異常時(shí),我們?cè)贚ocalDateTime字段上添加的注解如下所示。

import java.time.LocalDateTime;import com.baomidou.mybatisplus.annotation.FieldFill;import com.baomidou.mybatisplus.annotation.TableField;import com.fasterxml.jackson.annotation.JsonFormat;@TableField(value = 'CREATE_TIME', fill = FieldFill.INSERT)@JsonFormat(pattern = 'yyyy-MM-dd HH:mm:ss', locale = 'zh', timezone = 'GMT+8')private LocalDateTime createTime;解決問題問題描述

SpringBoot通過(guò)原生OpenFeign客戶端調(diào)用HTTP接口,如果返回值中包含LocalDateTime類型(包括其他JSR-310中java.time包的時(shí)間類),在客戶端可能會(huì)出現(xiàn)反序列化失敗的錯(cuò)誤。錯(cuò)誤信息如下:

Caused by:com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value (’2020-10-07T11:04:32’)

問題分析

從客戶端調(diào)用fegin,也是相當(dāng)于URL傳參就相當(dāng)于經(jīng)過(guò)一次JSON轉(zhuǎn)換,數(shù)據(jù)庫(kù)取出‘2020-10-07T11:04:32’數(shù)據(jù)這時(shí)是時(shí)間類型,進(jìn)過(guò)JSON之后就變成了String類型,T就變成了字符不再是一個(gè)特殊字符,因此String的字符串“2020-10-07T11:04:32”反序列化就會(huì)失敗。

問題解決

在項(xiàng)目中增加依賴。

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

注:如果是用的是SpringBoot,并且明確指定了SpringBoot版本,引入jackson-datatype-jsr310時(shí),可以不用指定版本號(hào)。

接下來(lái),在POJO類的LocalDateTime類型字段增加如下注解。

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;

添加后的效果如下所示。

import java.time.LocalDateTime;import com.baomidou.mybatisplus.annotation.FieldFill;import com.baomidou.mybatisplus.annotation.TableField;import com.fasterxml.jackson.annotation.JsonFormat;import com.fasterxml.jackson.databind.annotation.JsonDeserialize;import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;@TableField(value = 'CREATE_TIME', fill = FieldFill.INSERT)@JsonFormat(pattern = 'yyyy-MM-dd HH:mm:ss', locale = 'zh', timezone = 'GMT+8')@JsonDeserialize(using = LocalDateTimeDeserializer.class)private LocalDateTime createTime;

此時(shí),再次調(diào)用遠(yuǎn)程接口,問題解決。

到此這篇關(guān)于SpringBoot整合OpenFeign的坑的文章就介紹到這了,更多相關(guān)SpringBoot整合OpenFeign 內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久久av电视剧| 日韩av有码| 亚洲精品欧洲| 国产69精品久久| 亚洲免费专区| 国产精品专区免费| 99国产精品视频免费观看一公开 | 日本91福利区| 欧美日韩精品一区二区视频| 国产精品扒开腿做爽爽爽软件| 美女精品一区二区| 日韩av首页| 99视频精品全部免费在线视频| 国产在视频一区二区三区吞精| 麻豆精品av| 中文在线а√在线8| 在线亚洲人成| 亚洲精品极品少妇16p| 国产中文一区| 日韩一区二区久久| 在线看片日韩| 国产精品流白浆在线观看| 亚洲一级少妇| 免费不卡在线观看| 国产精品乱战久久久| 亚洲一级少妇| 免费在线观看日韩欧美| 国产乱人伦丫前精品视频| 国产精品一区二区三区av麻 | 激情婷婷欧美| 蘑菇福利视频一区播放| 日韩av影院| www.com.cn成人| 久久国产福利| 国产一区二区三区不卡av| 午夜精品婷婷| 69精品国产久热在线观看| 国产精品欧美日韩一区| 精品成人免费一区二区在线播放| 免费成人性网站| 欧洲亚洲一区二区三区| 亚洲调教视频在线观看| 婷婷精品在线观看| 国产精品国产三级国产在线观看| 精品国产免费人成网站| 9国产精品视频| 国产极品模特精品一二| 欧美日韩国产在线观看网站| 91精品啪在线观看国产爱臀| 久久久夜精品| 欧美精品1区| 日本在线不卡视频| 黄色国产精品| 偷拍精品精品一区二区三区| 日韩精品亚洲专区在线观看| 欧美日韩少妇| 欧美日韩中文一区二区| 亚洲精品成a人ⅴ香蕉片| 午夜日韩av| 欧美特黄一级大片| 久久不见久久见中文字幕免费| 欧美天堂视频| 国产精品白丝一区二区三区| 国产伦精品一区二区三区视频| 日韩激情一二三区| 日韩不卡免费视频| 国产欧美日韩免费观看| 欧美啪啪一区| 欧美精品国产一区| 91久久久精品国产| 91精品国产经典在线观看| 午夜亚洲精品| 国产精品网址| 欧美极品中文字幕| 久久精品福利| 亚洲女同av| 蜜臀av免费一区二区三区| 欧美成人久久| 视频一区二区欧美| 欧美日韩一区二区三区不卡视频| 欧美日一区二区三区在线观看国产免 | 99成人在线视频| 精品1区2区3区4区| 激情五月综合网| 婷婷久久免费视频| 国产成人77亚洲精品www| 日韩精品导航| 国产麻豆一区二区三区| 久久福利毛片| 亚洲视频电影在线| 日韩精品一页| 欧美久久久网站| 欧美久久一区二区三区| 日韩1区2区3区| 欧美亚洲tv| 精品视频自拍| 久久久久亚洲| 久久久久久婷| 九九九精品视频| 欧美天堂视频| 激情欧美日韩一区| 亚洲网址在线观看| 国产精品国码视频| 美日韩精品视频| 欧美极品中文字幕| 蜜桃av在线播放| 亚洲专区一区| 麻豆视频观看网址久久| 黄色aa久久| 亚洲一区二区网站| 久久狠狠久久| 欧美成人基地| 中文字幕av一区二区三区人| 蜜桃一区二区三区在线| 国产精品任我爽爆在线播放| 日韩精品午夜| 欧美久久久网站| 亚洲一二三区视频| 免费欧美一区| 国产精品久久久网站| 久久久久.com| 国产女人18毛片水真多18精品| www.com.cn成人| 四虎精品一区二区免费| 精品欧美日韩精品| 蜜臀久久99精品久久久久宅男| 精品一区二区三区中文字幕视频| 亚洲美洲欧洲综合国产一区 | 国产精品伊人| 日韩精品一二区| 欧美sss在线视频| 97欧美在线视频| 欧美精品第一区| 亚洲精品乱码久久久久久蜜桃麻豆| 国产字幕视频一区二区| 日本一区二区高清不卡| 日本视频在线一区| 亚洲精选91| 亚洲精品免费观看| 中文字幕视频精品一区二区三区 | 免费成人在线观看| 国产高清一区二区| 亚洲www免费| 福利在线免费视频| 久久精品五月| 国产精品s色| 国产精品日本一区二区不卡视频 | 日韩精品中文字幕第1页| 日本h片久久| 日本电影久久久| 日韩中文字幕在线一区| 免费在线观看不卡| 青青草国产精品亚洲专区无| 亚洲a级精品| 欧美伊人久久| 日韩美女国产精品| 亚洲综合小说| 国产亚洲观看| 日韩福利视频导航| 秋霞影院一区二区三区| 久久超碰99| 国产高潮在线| 日韩在线卡一卡二| 日韩在线网址| 国产一区一一区高清不卡| 婷婷丁香综合| 国产欧美69| 亚洲激情另类| 美女在线视频一区| 午夜视频精品| 欧美激情精品| 国产毛片一区| 成人在线黄色| 亚洲欧美网站在线观看| 人人精品亚洲| 国产精品s色| 免费精品视频| 国产一二在线播放| 中文字幕亚洲影视| 91亚洲国产高清| 国产亚洲欧美日韩在线观看一区二区 | av最新在线| 国产欧美日韩一区二区三区在线| 亚洲专区一区| 激情婷婷久久| 伊人久久在线| 高潮久久久久久久久久久久久久| 婷婷综合国产| 四虎在线精品| 久久福利一区| 久久久久.com| 精品久久精品| 欧美aaaaaa午夜精品| 久久精品xxxxx| 国产欧美日本| 麻豆精品久久| 国产精品毛片一区二区在线看| 国产精品s色| 电影91久久久| 国产一区二区三区久久久久久久久|