Feign解决服务之间传递文件、传递list,map、对象( 三 )

encodeMultipartFile(MultipartFile file){HttpHeaders filePartHeaders = new HttpHeaders();//设置 Content-typefilePartHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);try {Resource multipartFileResource = new MultipartFileResource(file.getInputStream(), file.getOriginalFilename(), file.getSize());return new HttpEntity<>(multipartFileResource, filePartHeaders);} catch (IOException e) {throw new EncodeException("无法对请求进行编码:", e);}}/*** 判断是否多个 MultipartFile* @param object* @return*/private boolean isMultipartFileArray(Object object){return object != null}/*** 判断是否MultipartFile文件* @param object 要判断的对象* @return*/private boolean isMultipartFile(Object object){return object instanceof MultipartFile;}}【Feign解决服务之间传递文件、传递list,map、对象】将该编码器注册为bean
import feign.Contract;import feign.codec.Encoder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * 上传文件所用配置 * @author admin */@Configurationpublic class MultipartSupportConfig {/*** 启用feigin自定义注解支持 , 如 @RequestLine 和 @Param* @return*/@Beanpublic Contract feignContract(){return new Contract.Default();}/*** feign 实现多pojo传输与MultipartFile上传 编码器 , 需配合开启feign自带注解使用* @return*/@Beanpublic Encoder feignSpringFormEncoder(){//注入自定义编码器return new FeignSpringFormEncoder();}}这个时候就基本告一段落 ,
所有的请求按照这个标准来写
/*** 示例代码:请求方式和路径之间须有一个空格 。表单提交的话请求方式只能是post* 支持如下的所有请求方式 。* 请求参数需要 @Param 修饰* 在接收端 , 采用@RequestPart注解接收每一个参数 。 所有接收都用 @RequestPart(value = "http://kandian.youth.cn/index/advertiser", required = false)* @return*/@RequestLine(value = "http://kandian.youth.cn/index/POST /data/test01")ResultJson test01(@Param(value = "http://kandian.youth.cn/index/name") String name,@Param(value = "http://kandian.youth.cn/index/nametwo") String nametwo,@Param(value = "http://kandian.youth.cn/index/file") MultipartFile file,@Param(value = "http://kandian.youth.cn/index/advertiserMap") Map advertiserMap,@Param(value = "http://kandian.youth.cn/index/materials") List materials,@Param(value = "http://kandian.youth.cn/index/user") User user,@Param(value = "http://kandian.youth.cn/index/files") MultipartFile[] files);要使用 Feign 自带的注解 , @RequesLine 和 @Param 来做请求参数的注入 ,
我测试的时候 , 使用 如下这些参数 , 都可以完成传递、
/*** 示例代码:feign请求测试* @return*/public String test01(){try {String name = "中文";String nametwo = "two";MultipartFile file = fileToMultipartFile(new File("E:\\临时\\1.xlsx"));MultipartFile file2 = fileToMultipartFile(new File("E:\\临时\\2.xlsx"));Map advertiserMap = new HashMap<>();User user = new User();user.setXm("张三");User user1 = new User();user1.setXm("张四");advertiserMap.put("zw", user);advertiserMap.put("中", user1);List list = new ArrayList<>();list.add(user);list.add(user1);MultipartFile[] files = new MultipartFile[2];files[0] = file;files[1] = file2;ResultJson resultJson = resourceAdminFeignImp.test01(name, nametwo, file, advertiserMap, list, user, files);if (ResultEnum.SUCCESS.getStatus().equals(resultJson.getStatus())){log.info("测试结果:{}", resultJson.getData());return (String) resultJson.getData();} else {log.error("测试失败 , 失败原因 , {}", resultJson.getMsg());return null;}} catch (Exception e) {e.printStackTrace();log.error("服务不可用或服务调用失败 , 上传数据失败");return null;}}