项目中使用了Spring cloud 中的feign调用了另一个系统的接口。
当传输文件时需做另外配置
导入pom
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.2.2</version>
</dependency>
写一个配置类
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description: Spring cloud
* @params
* @return
* @date 2019/2/20 12:55 PM
*/
@Configuration
public class FeignSupportConfig {
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
使用配置类
configuration = 配置类
consumes = MediaType.MULTIPART_FORM_DATA_VALUE 必须加
@RequestPart("file") 上传文件必须使用
@FeignClient(name = "aiface-producer",path="/facecmp",configuration = FeignSupportConfig.class)
@Component
public interface FaceCmpFeign {
@PostMapping(value="/searchByInfo",
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ReturnResult searchByInfo(
@RequestPart("file") MultipartFile file,
@RequestParam("videoIds") String videoIds,
@RequestParam("faceSetId") String faceSetId,
@RequestParam("info") String info,
@RequestParam(value = "pageNo",required=false) Integer pageNo,
@RequestParam(value = "pageSize",required=false) Integer pageSize) throws Exception;
}
配置完毕可以上传文件了,但是,这样配置后,只能上传文件了,如果你不上传文件就会报错。其他当接口也调用不了了。
配置类修改一下
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;
/**
* @Description: Spring cloud 文件上传配置类 此类只能添加单文件,并且不支持参数传输对象
* @params
* @return
* @date 2019/2/20 12:55 PM
*/
@Configuration
public class FeignSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}