使用feign调用服务实现文件上传功能,缺失请求头参数content-type:“multipart/form-data”
一.报错信息:
feign.codec.EncodeException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile] and content type [multipart/form-data]
二 .解决方案:
1.加入依赖
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
2.增加配置类:
@Configuration
public class FeignSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public SpringFormEncoder feignFormEncoder(){
return new SpringFormEncoder();
}
}
3.编写远程调用接口
@FeignClient(value = "wf-company" , fallback = CompanyControllerImpl.class,configuration = FeignSupportConfig.class )
public interface CompanyController {
@PostMapping(value = "uploadLogo",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
int uploadLogo(@RequestPart("file") MultipartFile file,@RequestParam("cname") String cname);
}
注意:MultipartFile类换成了@RequestPart()注解
4.服务接收
/**
* 根据公司名称创建一个文件夹 将logo放入此文件夹
* @author mx
*/
@PostMapping(value = "uploadLogo",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public int uploadLogo(@RequestPart("file") MultipartFile file,@RequestParam("cname") String cname){
//业务代码
}