【Feign】Spring Cloud Feign Client 调用文件上传接口(实现MultipartFile上传文件功能)

时间:2025-04-11 17:33:49

场景:

        跨服务调用文件上传接口

        技术栈Feign + nacos

报错:

                : Error converting request body

解决方案:

step1:添加pom依赖

        <!--这里我使用nacos注册中心,如果没有使用可以不用nacos-discovery-->
        <dependency>
            <groupId></groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId></groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

step2:添加配置类 


import ;
import ;
import ;
import ;
import ;
import ;
import .*;
import ;


@Configuration
public class FeignMultipartSupportConfig {

    @Bean
    @Primary
    @Scope("prototype")
    public Encoder multipartFormEncoder() {
        return new SpringFormEncoder(new SpringEncoder(new ObjectFactory<HttpMessageConverters>() {
            @Override
            public HttpMessageConverters getObject() throws BeansException {
                return new HttpMessageConverters(new RestTemplate().getMessageConverters());
            }
        }));
    }

    @Bean
    public  multipartLoggerLevel() {
        return ;

    }
}

step3:编写Feign Client

import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

/**
 * 注意点
 * 1:configuration = 
 *  = MediaType.MULTIPART_FORM_DATA_VALUE
 */

@FeignClient(value = "baseserver",configuration = )
public interface BaseserverClient {

    /**
     * 文件上传至阿里云
     * @param file
     * @param imei
     * @param sysDictItemId
     * @return
     */
    @PostMapping(value = "/file/image/uplode", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    JsonResult<String> upload(@RequestPart MultipartFile file);
}

step4:调用


@Api(tags = "植物智能管理", value = "植物库")
@RestController
@RequestMapping("/plant/AI")
@Slf4j
public class PlantAIController {


    @Autowired
    private BaseserverClient baseserverClient;

    @PostMapping("/recognition")
    public void test(@RequestPart(value = "file", required = false) MultipartFile file){

        (file);

    }

}