Feign在发送文件时,可以使用Feign-form。

另一种方式,关键就是,要将文件转成Resource,然后使用Spring的MultivalueMap

本次发送的是个对象,对象里含有 文件对象数组Multipartfile[]

前台是将 键值对和 文件都放到formdata里去。

发送前,将文件对象数组和属性都取出,放入multivaluemap,文件转成bytearrayresource

接收方,spring可以自动识别。

但是需要注意的是,接收方如果把multipartfile直接返回回来,是识别不了的,所以建议在接收方把 file属性进行序列化忽略。另外(该方式没有测试,不知道是否可行)或许可以把文件像调用方那样转成resource试试

$(document).on('click','.submit',function () {
var formData = new FormData();
let arr = $("#rating").serializeArray();
$(arr).each(function () {
let name = this.name;
let value = this.value;
formData.append(name,value);
});
let eachEnd = true;
$(".fj-ul li").each(function () {
let $li = $(this);
let fileid = $li.data("fileid");
if(isNull(fileid)){
let file = $li.data("file");
if (file.size == 0) {
utils.alerter.show("文件大小是0,不可上传");
eachEnd = false;
return eachEnd;
}
//10M
if (file.size > 10 * 1024 * 1024) {
utils.alerter.show("文件不可超过10MB");
eachEnd = false;
return eachEnd;
}
formData.append("files",file);
}
}); if(eachEnd){
$.ajax({
url:'save',
type:'post',
data: formData,
processData: false,
contentType: false,
success:function (result) {
if(result.isok){ }
utils.alerter.show(result.msg);
},
error:function () {
utils.alerter.show("请求失败");
}
});
}
});

  

对象:截图部分字段

调用方

	/**
* 保存
* @param rating
* @return
*/
@PostMapping("/save")
@ResponseBody
public ApiResult<BoCrmCusRating> save(BoCrmCusRating rating,HttpSession session){
String loginname = (String) session.getAttribute(SSOLoginInterceptor.LOGINNAME);
if(rating.getId()==null){
rating.setCreateUser(loginname);
}else{
rating.setUpdateUser(loginname);
}
try {
MultiValueMap map = beanToMultiMap(rating);
return cusRatingFeign.save(map);
} catch (Exception e) {
logger.error("",e);
return ApiResult.failResult("失败:"+e.getMessage());
}
} /**
* bean to map
* @param t
* @param <T>
* @return
* @throws IllegalAccessException
*/
private static <T> MultiValueMap beanToMultiMap(T t) throws Exception {
MultiValueMap<String,Object> map = new LinkedMultiValueMap<>();
Class<?> clazz = t.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object o = field.get(t);
if(!field.getName().equals("files")){
map.add(field.getName(), o);
}else{
MultipartFile[] files = (MultipartFile[]) o;
for (MultipartFile file : files) {
ByteArrayResource resource = new ByteArrayResource(file.getBytes()){
@Override
public String getFilename() {
try {
return URLEncoder.encode(file.getOriginalFilename(),"UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage());
}
}
};
map.add("files",resource);
}
}
}
return map;
}

  

	/**
* 保存
* @return
*/
@RequestMapping(value = "/save",method = RequestMethod.POST,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ApiResult<BoCrmCusRating> save(MultiValueMap map);

  接收方

	/**
* 保存
* @return
*/
@PostMapping("/save")
public ApiResult<BoCrmCusRating> save(BoCrmCusRating rating){
return cusRatingService.save(rating);
}

  

Feign 发送对象,对象含多个文件的更多相关文章

  1. Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method 'POST' not supported (附带其余好几个坑)

    yml: feign: httpclient: enabled: true properties: #feign feign.httpclient.enabled=true <!-- https ...

  2. PHP如何通过Http Post请求发送Json对象数据?

    因项目的需要,PHP调用第三方 Java/.Net 写好的 Restful Api,其中有些接口,需要 在发送 POST 请求时,传入对象. Http中传输对象,最好的表现形式莫过于JSON字符串了, ...

  3. Qt 使用 lambda 表达式做为槽函数时为什么使用 QObject::sender() 获取到的发送信号对象指针为空?

    /*! Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; ...

  4. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  5. C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

    我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...

  6. 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME

    原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...

  7. 使用Feign发送HTTP请求

    使用Feign发送HTTP请求 在往常的 HTTP 调用中,一直都是使用的官方提供的 RestTemplate 来进行远程调用,该调用方式将组装代码冗余到正常业务代码中,不够优雅,因此在接触到 Fei ...

  8. PHP中面相对象对象的知识点整理

    面向对象 万物皆对象,将构成问题的事务分解到各个对象上,建立对象的目的不是为了完成一个工作,而是为了描述某个事务在解决问题中的行为,更符合人的思维习惯,代码重用性高,可扩展性. ___________ ...

  9. json 字符串转换成对象,对象转换成json字符串

    json   字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法:   [注意jquery版本问题] var str = '{"name":&qu ...

  10. 导出不带.svn的文件夹或者是不含.class的文件

    转载自:http://blog.csdn.net/z278718149/article/details/21537395 如何导出不带.svn的文件夹或者是不含.class的文件 在工作环境中,有的时 ...

随机推荐

  1. 洛谷 P1987 摇钱树

    题目戳 题目描述 Cpg 正在游览一个梦中之城,在这个城市中有n棵摇钱树...这下,可让Cpg看傻了...可是Cpg只能在这个城市中呆K天,但是现在摇钱树已经成熟了,每天每棵都会掉下不同的金币(不属于 ...

  2. 【题解】APIO2014回文串

    哇哦~想不到我有生之年竟然能够做出字符串的题目ヾ(✿゚▽゚)ノ虽然这题比较裸但依然灰常开心! 首先有一个棒棒的性质:本质不同的回文串最多有 O(n) 个.首先 manacher 把它们都找出来,然后问 ...

  3. 【刷题】洛谷 P3676 小清新数据结构题

    题目背景 本题时限2s,内存限制256M 题目描述 在很久很久以前,有一棵n个点的树,每个点有一个点权. 现在有q次操作,每次操作是修改一个点的点权或指定一个点,询问以这个点为根时每棵子树点权和的平方 ...

  4. BZOJ2595:[Wc2008]游览计划——题解(插头dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2595 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行 ...

  5. Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序

    Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...

  6. 20165218 2017-2018-2 《Java程序设计》课程总结

    20165218 2017-2018-2 <Java程序设计>课程总结 一.每周作业链接汇总 20165218 我期望的师生关系 20165218 学习基础和C语言基础调查 2016521 ...

  7. bzoj2296: 【POJ Challenge】随机种子(思维题/水题)

    有点类似CF某场div2T1... 前面接上1234567890000000,后面加上x+(1234567890000000%x)就可以保证是x的倍数了 #include<iostream> ...

  8. 【bzoj2006】超级钢琴

    Portal --> bzoj2006 Solution 一开始看错题了..没有看到编号连续然后愣了好久== ​ 首先肯定是找最大的\(K\)个啦,然后具体怎么找的话..没有什么特别好的办法那就 ...

  9. 【loj2133】【NOI2015】品酒大会

    Portal --> loj2133 Solution 虽然说这题貌似用后缀树之类的好像会更加简短一点..但是还是因为在智力康复所以就还是用后缀数组好了嗯(哇好感动啊难得那么顺畅写了一道noi的 ...

  10. 使用Hystrix进行微服务降级管理

    前言:目前我们的项目是微服务架构,基于dubbo框架,服务之间的调用是通过rpc调用的.刚开始没有任何问题,项目运行健康.良好.可是过了一段时间,线上总有人反应查询订单失败,等过了一段时间才能查到.这 ...