项目使用springcloud作为框架,使用fegin去调用服务。
1.处理Multipart的config
上传时,需要在fegin中加入以下配置类。
/**
* @description: 上传文件的config
* @Author:
* @Date: 2020/4/1 11:34
*/
@Configuration
public class FeignMultipartSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
@Primary//自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Scope("prototype")//使用多例每次获得bean都会生成一个新的对象
public Encoder multipartFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
@Bean
public feign.Logger.Level multipartLoggerLevel() {
return feign.Logger.Level.FULL;
}
}
2.fegin中的controller
/**
* 批量导入设备信息
* @return
*/
@ApiOperation(value = "批量导入设备信息", httpMethod = "POST")
@RequestMapping(value = "/batchImportEquipment", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ApiImplicitParams({
@ApiImplicitParam(value = "文件", name = "multipartFile", dataType = "String"),
@ApiImplicitParam(value = "类型", name = "type", dataType = "String"),
@ApiImplicitParam(value = "类型id", name = "typeId", dataType = "String")
})
public ResponseDto batchImportEquipment(@RequestParam("multipartFile") MultipartFile multipartFile, @RequestParam("type") String type, @RequestParam("typeId") String typeId){
return iEquipmentService.batchImportEquipment(multipartFile, type, typeId);
}
这里注意接收文件用RequestParam注解和multipartFile都可以,在RequestMapping需要加入consumes = MediaType.MULTIPART_FORM_DATA_VALUE。
3.fegin中代码
/**
* 批量导入设备信息
* @param multipartFile 文件
* @param typeId 分类信息id
* @param type 分类信息
* @return
*/
@RequestMapping(value = "/batchImportEquipment", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ResponseDto batchImportEquipment(@RequestPart("multipartFile")MultipartFile multipartFile, @RequestParam("type") String type, @RequestParam("typeId") String typeId);
这里的文件参数注解必须为@RequestPart
4.服务提供者接收代码
/**
* 批量导入设备信息
* @param multipartFile 文件
* @param type 分类信息
* @param typeId 分类信息id
* @return
*/
@RequestMapping(value = "/batchImportEquipment", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseDto batchImportEquipment(@RequestPart("multipartFile") MultipartFile multipartFile, @RequestParam("type") String type, @RequestParam("typeId") String typeId ){
//处理业务
}