詳解spring cloud feign踩坑記錄
1:多客戶端時(shí),feign接口抽取到公共jar中,此時(shí),客戶端的啟動(dòng)類上需要對(duì)該jar中feign所在的包進(jìn)行掃描,要在spring和feign中同時(shí)注冊(cè),否則啟動(dòng)時(shí)會(huì)報(bào):“Consider defining a bean of type '******Feign' in your configuration.”
@SpringBootApplication @EnableTransactionManagement @EnableDiscoveryClient @ComponentScan(basePackages={"com.lcamtech.aidis.feign","com.lcamtech.aiads.dts"}) @EnableFeignClients(basePackages = {"com.lcamtech.aidis.feign"}) @EnableCaching @MapperScan(basePackages = "com.lcamtech.aiads.dts.mapper") public class Application extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
重點(diǎn):
@ComponentScan(basePackages={"com.lcamtech.aidis.feign","com.lcamtech.aiads.dts"}) @EnableFeignClients(basePackages = {"com.lcamtech.aidis.feign"})
aidis包為包含feign的jar, 此時(shí)@ComponentScan還需要同時(shí)掃描本項(xiàng)目的包。
2:使用Fegin傳值時(shí),GET變POST
@FeignClient(value = "SERVICE-NAME") public interface UserAccountFeign { @RequestMapping(value = "/ac/exist", method = RequestMethod.GET) public BaseResult isExist(@RequestParam("mobile") String mobile); }
feign在傳遞時(shí)默認(rèn)會(huì)將數(shù)據(jù)放在RequestBody中,所以會(huì)導(dǎo)致默認(rèn)使用POST請(qǐng)求(及時(shí)@RequestMapping寫著GET也沒用),此時(shí)需要在參數(shù)列表中聲明@RequestParam才能進(jìn)行正常的GET請(qǐng)求。
3:feign請(qǐng)求返回復(fù)雜對(duì)象時(shí)
如:
public class Result{ private string code; private string message; private Object data; //get/set }
問題描述:當(dāng)請(qǐng)求返回的是Result的一個(gè)對(duì)象時(shí),對(duì)于該對(duì)象內(nèi)部的data值,會(huì)變成一個(gè)linkedHashMap,并不會(huì)被轉(zhuǎn)換成相應(yīng)的類對(duì)象,若直接強(qiáng)轉(zhuǎn)會(huì)報(bào)類型錯(cuò)誤。
解決方法1:簡單轉(zhuǎn)換
/** * @Description: 將數(shù)據(jù)轉(zhuǎn)換到相應(yīng)的容器 * @param bean * @param clazz * @return * @throws * @author SunF * @date 2018/6/20 10:28 */ public static <T> T convertValue(Object bean, Class<T> clazz){ try{ ObjectMapper mapper = new ObjectMapper(); return mapper.convertValue(bean, clazz); }catch(Exception e){ log.error("錯(cuò)誤的轉(zhuǎn)換:BeanUtil.convertValue() --->" + e.getMessage()); return null; } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud?Function?SpEL注入漏洞分析及環(huán)境搭建
SpringCloud 是一套分布式系統(tǒng)的解決方案,常見的還有阿里巴巴的Dubbo,F(xiàn)ass的底層實(shí)現(xiàn)就是函數(shù)式編程,SpringCloud Function 就是Spring提供的分布式函數(shù)式編程組件,下面給大家介紹下SpringCloud?Function?SpEL注入漏洞分析,感興趣的朋友一起看看吧2022-04-04java截取字符串中的指定字符的兩種方法(以base64圖片為例)
本文介紹了使用Java截取字符串中指定字符的方法,通過substring索引和正則實(shí)現(xiàn),文章詳細(xì)介紹了實(shí)現(xiàn)步驟和示例代碼,對(duì)于想要了解如何使用Java截取字符串指定字符的讀者具有一定的參考價(jià)值2023-08-08Mybatis的parameterType造成線程阻塞問題分析
這篇文章主要詳細(xì)分析了Mybatis的parameterType造成線程阻塞問題,文中有詳細(xì)的解決方法,及相關(guān)的代碼示例,具有一定的參考價(jià)值,感興趣的朋友可以借鑒閱讀2023-06-06Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案
這篇文章主要介紹了Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07