前言:前端传来MultipartFile文件到客户端服务后通过Feign传递到业务层时出现传递失败,折腾了一会发现Feign需要加一个配置类来解决问题。
1、调用层配置类
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;
@Configuration
public class MultipartSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
2、调用者Feign接口
// 配置configuration
@FeignClient(name="***", configuration = {MultipartSupportConfig.class})
public interface Client {
/**
* 上传文件
* @Param multipartFile 文件对象
* @Param uniqueId 用户ID
* @Param @RequestPart:文件对象需要使用此注解,不要使用@RequestParam,额外参数可以使用
* @Return 返回数据
*/
@PostMapping(value="/uploadFile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Result<T> uploadFile(@RequestPart("file") MultipartFile multipartFile, @RequestParam("uniqueId") String uniqueId);
}
3、接收者
@Operation(summary = "上传文件", method = "POST")
@PostMapping("/uploadFile")
public Result <T> uploadFile(@RequestPart("file") MultipartFile multipartFile, @RequestParam("uniqueId") String uniqueId){
// 文件上传流程...
return Result.success("返回数据");
}