1,如果参数有Date类型,则date类型不能为空。
我们平常在写接口时,方法的入参中可能会有Date类型的参数,当抽成feign接口时,此时的Date类型的入参就会报错。
解决方案:建议将事件类型的入参改为String,到具体微服务层面时再转为Date类型即可。
2,如果接口的参数有多个时,必须加上@RequestParam注解在参数上。
接口的方法入参中,存在多个参数时,需要加上注解
3,如果接口方法的@RequestMapping中values有多个时,则报错
解决方案:在feign接口中必须拆开。
4,通过feign调用接口传递附件后,文件实体变为null
项目中可能由于某些原因,前端页面不能直接调用文件服务器,所以需要通过后端的API层,调用feign接口,最终转到文件服务器上,但是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接口调用后,请求头失效
我们项目在调用接口时,往往都会有带请求头的需求,但是通过feign接口后,请求头会消失,因为feign原本是不支持请求头的。
解决方案:增加请求头相关的配置
@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);
}
}
}
}
}