1舱污,如果參數(shù)有Date類型,則date類型不能為空粱栖。
我們平常在寫接口時话浇,方法的入?yún)⒅锌赡軙蠨ate類型的參數(shù),當(dāng)抽成feign接口時闹究,此時的Date類型的入?yún)⒕蜁箦e幔崖。
image.png
解決方案:建議將事件類型的入?yún)⒏臑镾tring,到具體微服務(wù)層面時再轉(zhuǎn)為Date類型即可。
2渣淤,如果接口的參數(shù)有多個時赏寇,必須加上@RequestParam注解在參數(shù)上。
接口的方法入?yún)⒅屑廴希嬖诙鄠€參數(shù)時嗅定,需要加上注解
image.png
3,如果接口方法的@RequestMapping中values有多個時用踩,則報錯
image.png
解決方案:在feign接口中必須拆開渠退。
4,通過feign調(diào)用接口傳遞附件后脐彩,文件實體變?yōu)閚ull
image.png
項目中可能由于某些原因碎乃,前端頁面不能直接調(diào)用文件服務(wù)器,所以需要通過后端的API層丁屎,調(diào)用feign接口荠锭,最終轉(zhuǎn)到文件服務(wù)器上,但是feign接口本身是不支持文件傳遞的晨川。
解決方案:
(1)增加maven依賴
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
(2)增加配置文件
@Configuration
public class FeignConfiguration {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
@Primary
@Scope("prototype")
public Encoder feignEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
5证九,通過feign接口調(diào)用后,請求頭失效
我們項目在調(diào)用接口時共虑,往往都會有帶請求頭的需求愧怜,但是通過feign接口后,請求頭會消失妈拌,因為feign原本是不支持請求頭的拥坛。
解決方案:增加請求頭相關(guān)的配置
@Configuration
public class FeignConfiguration implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String url=request.getRequestURI();
if(StringUtils.isNotEmpty(url)){
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
requestTemplate.header(name, values);
}
}
}
}
}