feign传参MultipartFile问题解决

首先,feign服务之间的调用,传参默认的格式为:ContentType=application/x-www-form-urlencoded

以表单的形式传参的,而文件流的传参,需要form-data的ContentType,否则会报错的

 

首先引入依赖:

 
            io.github.openfeign.form
            feign-form
            3.8.0
        

        
            io.github.openfeign.form
            feign-form-spring
            3.8.0
        

注意spring boot版本是2.x以上的,上面两个依赖的版本不低于3.5.0,否则还是无效的

 

新建feign的配置:

package com.wm.blog_config.config;

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 :半卷流年
 * @description : 解决feign传递流数据的异常
 * @createTime :2020/6/14
 */
@Configuration
public class FeignSupportConfig {

    @Autowired
    private ObjectFactory messageConverters;

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

}

在feign接口中配置:

package com.wm.blog_admin.feign;

import com.wm.blog_admin.feign.factory.PictureClientFallbackFactory;
import com.wm.blog_common.constatnt.CommonConstant;
import com.wm.blog_common.domain.TFileDO;
import com.wm.blog_common.entity.TFile;
import com.wm.blog_common.req.TFileQuery;
import com.wm.blog_common.result.Result;
import com.wm.blog_config.config.CustomFeignConfig;
import com.wm.blog_config.config.FeignSupportConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/***
 * @ClassName: PictureFeignClient
 * @Description: picture feign调用  todo feign使用get有坑啊,是否考虑使用HttpClient替换feign的HttpURLConnection,采用apache的HttpClient
 * @Author: wm_yu
 * @Create_time: 16:39 2020-3-26
 */
@FeignClient(value = CommonConstant.PICTURE_MODULE_NAME, configuration = {CustomFeignConfig.class, FeignSupportConfig.class}, fallbackFactory = PictureClientFallbackFactory.class)
public interface PictureFeignClient {

    /**
     * id查询图片信息
     * @param id
     * @return
     */
    @GetMapping("/web/picture/{id}")
    Result get(@PathVariable("id") Long id);


    /**
     * id批量查询图片信息
     * @param idList
     * @return
     */
    @PostMapping("/web/picture/getByIdList")
    Result> getByIdList(@RequestBody List idList);


    /**
     * 文件上传
     * @param file
     * @return
     */
    @PostMapping(value = "/web/picture/uploadFile",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     Result uploadFile(@RequestPart("file") MultipartFile file);

}

 

feign传参MultipartFile问题解决_第1张图片

 

注意加上这个,表示传参格式:

feign传参MultipartFile问题解决_第2张图片

就可以传参了的

你可能感兴趣的:(Java,spring,boot,java)