美文网首页
feign接口调用时问题整理

feign接口调用时问题整理

作者: 面朝大海_1234 | 来源:发表于2019-08-15 16:46 被阅读0次

1,如果参数有Date类型,则date类型不能为空。

我们平常在写接口时,方法的入参中可能会有Date类型的参数,当抽成feign接口时,此时的Date类型的入参就会报错。


image.png

解决方案:建议将事件类型的入参改为String,到具体微服务层面时再转为Date类型即可。

2,如果接口的参数有多个时,必须加上@RequestParam注解在参数上。

接口的方法入参中,存在多个参数时,需要加上注解


image.png

3,如果接口方法的@RequestMapping中values有多个时,则报错

image.png

解决方案:在feign接口中必须拆开。

4,通过feign调用接口传递附件后,文件实体变为null

image.png

项目中可能由于某些原因,前端页面不能直接调用文件服务器,所以需要通过后端的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);

                    }
                }
            }


    }
}

相关文章

网友评论

      本文标题:feign接口调用时问题整理

      本文链接:https://www.haomeiwen.com/subject/rknzjctx.html