項目使用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 ){
//處理業務
}