feign文件上传终极解决方案(解决多个方法包括但不限于上传文件方法的feign客户端调用报错)

feign文件上传终极解决方案

maven需要增加依赖

	<dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form-spring</artifactId>
            <version>3.4.1</version>
        </dependency>

配置类 Config.java.

package com.scen.web.config;

import feign.Logger;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 注解配置
 *
 * @author Scen
 * @date 2018/4/18 18:31
 */
@Configuration
public class Config {

    /**
     * 打开feign的日志
     *
     * @return
     */
    @Bean
    Logger.Level feignLoggerLevel() {

        return Logger.Level.FULL;

    }


    /**
     * 涉及文件传输配置
     */
    class MultipartSupportConfig {
        @Autowired
        private ObjectFactory<HttpMessageConverters> messageConverters;

        @Bean
        public Encoder feignFormEncoder() {
            return new SpringFormEncoder(new SpringEncoder(messageConverters));
        }
    }
}

feign客户端需要加的注解

@RequestMapping(value = "/upload", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},
            consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
void upload(
           @RequestPart("file") MultipartFile file,
    ) throws Exception;

思路:直接传没有任何报错,但是每次都会进入熔断器,遂注释掉熔断器,发现走不到断点就报了个Jackson相关错误(怀疑是远程传输序列化问题),定位到是encoder这个家伙出现的问题,翻了众多资料源码终于解决!同时解决一个feign客户端同时有上传文件方法和其他普通方法调用报错的问题!

2019-01-08更新:3.4.1版本这种方案正常用,更高的版本试了一下依然报错,目前没解决升级版本后又回退了 o(╯□╰)o

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值