让feign支持文件传输

公司用的spring cloud项目,需要用到feign上传文件到另一个服务。

首先,默认feign是不支持文件传输的,需要给feign增加插件.(spring boot版本:2.0.5.RELEASE)

1. 首先给feign加入支持文件传输的插件maven支持:

	    
	      io.github.openfeign.form
	      feign-form
	      3.3.0
		    
	    
	      io.github.openfeign.form
	      feign-form-spring
	      3.3.0
	    
	    
	      commons-fileupload
	      commons-fileupload
	      1.3.3
	    

2. 为feign接口所在java文件指定配置文件类FeignConfig,在其中配置表单的参数Encoder实例(不配置encoder会使用feign默认的encoder,具体哪个类待以后研究,这也是feign不支持文件传输的根本原因!)

@Configuration
public class FeignConfig {


    @Bean
    public feign.codec.Encoder  feignFormEncoder() {
      return new SpringFormEncoder();
    }
}

3.为对外接口声明类指定刚才新建的config类.

同时在文件传输接口上指定两个header:@Headers(value={"Content-Type: multipart/form-data","accept: multipart/form-data"}),指明请求是文件流传输

4.接口形参上增加@RequestPart注解,标记参数类型为文件

@FeignClient(value = "user",configuration = FeignConfig.class)
public interface WeiboFeignService {
	
	
	@Headers(value={"Content-Type: multipart/form-data","accept: application/json;charset=UTF-8"})
	@RequestMapping(value = "/api/user/upload_head", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,method = RequestMethod.POST)
	public String uploadPic(@RequestPart("image")MultipartFile image,@RequestParam("weiboUid")String weiboUid);
	

}

好了,去试试看能不能用吧

你可能感兴趣的:(java)