关于Content-Type: multipart/form-data的支持

 发布于 537天前  作者 yzhang226  303 次浏览  复制  上一个帖子  下一个帖子
 标签: 无

今天使用postman测试, 发现multipart/form-data的参数不支持,

postman的数据如下:

POST /dada-log-api/v1/logging/line HTTP/1.1
Host: 127.0.0.1:8380
Verification-Hash: casa
Cache-Control: no-cache
Postman-Token: 719df17f-c105-d42d-411c-876d3345c3fe
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="topic"

xx
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="logLine"

请问有办法支持?

16 回复

加了@AdpateBy注解没?

@wendal 加哪一个AdpateBy??

@yzhang226

@AdapteBy(type=UploadAdapter.class)

@wendal 真的可以✌, 请问能否加两种AdapteBy, 支持两种呢? 我还想支持application/x-www-form-urlencoded, 主要是以前用spring没有这个限制

@yzhang226 有,叫WhaleAdapter

@wendal 说错,Whale是支持3种,普通表单,json,文件上传

UploadAdapter同时支持普通和文件上传的

越说越乱。。。。

用Whale就是了

@wendal

	@At("/line")
@POST
@Ok("json")
@AdaptBy(type=WhaleAdaptor.class)
public RawRespone<Integer> logLine(@Param("topic") String topic,
@Param("logLine") List<String> logLines,
HttpServletRequest req) {

multipart/form-data是可以了, 但是application/x-www-form-urlencoded参数为null

@yzhang226 debug一下Whale,理应会判断的

@wendal application/x-www-form-urlencoded时, req.getParameterMap() 有数据, 但是没有注入

@wendal
adptor代码没有urlencoded的判断

String type = req.getHeader("Content-Type");
if (!Strings.isBlank(type)) {
if (type.contains("json")) { // JSON适配器
try {
return Json.fromJson(req.getReader());
} catch (Exception e) {
throw Lang.wrapThrow(e);
}
}
if (type.contains("multipart/form-data")) { // 上传适配器
FastUploading uploading = new FastUploading();
try {
return uploading.parse(req, uploadCtx);
} catch (UploadException e) {
throw Lang.wrapThrow(e);
}
}
}
return super.getReferObject(sc, req, resp, pathArgs);
  • @wendal @Param("logLine") List<String> logLines 这个是list, 是不是不能注入?
    Map<String, String[]> params = req.getParameterMap();是有logLine的参数数据的

用数组

    @Ok("json")
@At("/whale/test")
@AdaptBy(type=WhaleAdaptor.class)
public Object whaleInput(@Param("lines")String[] lines) {
return lines;
}

@wendal 换成数组之后确实可以了, 我有两个疑问:
为什么默认适配器不用Whale?
List为什么在这种情况下不能适配?而在form-data下list是可以的?

谢谢

WhaleAdaptor里面有个判断没做好, 还需要根据泛型判断一下:

        if (List.class.isAssignableFrom(clazz))
return new MapListInjector(paramName);

至于为啥默认不是WhaleAdaptor,那是怕任何接口都能做文件上传了. 不过, 自行在MainModule设置为WhaleAdaptor,也就变成默认的了.

@wendal 真的而是万分感谢, 完美解决了我的问题

关于Content-Type: multipart/form-data的支持的更多相关文章

  1. org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryRAYPKeHKTYSNdzc1;charset=UTF-8' not supported

    原文:https://www.cnblogs.com/yueli/p/7552888.html 最近同事在做一个图片上传功能.在入参 body 中同时传入文件和其它基本信息结果出现如题异常.在此记录下 ...

  2. http 请求参数之Query String Parameters、Form Data、Request Payload

    Query String Parameters 当发起一次GET请求时,参数会以url string的形式进行传递.即?后的字符串则为其请求参数,并以&作为分隔符. 如下http请求报文头: ...

  3. html5 file upload and form data by ajax

    html5 file upload and form data by ajax 最近接了一个小活,在短时间内实现一个活动报名页面,其中遇到了文件上传. 我预期的效果是一次ajax post请求,然后在 ...

  4. Sending forms through JavaScript[form提交 form data]

    https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript As in the ...

  5. the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header

    the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header ...

  6. org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported或其他Content type不支持处理

    很久没从头到尾搭框架,今天搭的过程中,springmvc controller方法入参用@RequestBody自动绑定参数时一直提示各种 not supported 排查问题有两个解决路径: 1)使 ...

  7. Web 前沿——HTML5 Form Data 对象的使用

    XMLHttpRequest Level 2 添加了一个新的接口——FormData.利用 FormData 对象,我们可以通过 JavaScript 用一些键值对来模拟一系列表单控件,我们还可以使用 ...

  8. Sending HTML Form Data

    public Task<HttpResponseMessage> PostFormData(){ // Check if the request contains multipart/fo ...

  9. HTML5 Form Data 对象的使用

    HTML5 Form Data 对象的使用  MDN: https://developer.mozilla.org/zh-CN/docs/Web/Guide/Using_FormData_Object ...

  10. ✅问题:Rails.ajax的data不支持{}hash格式。必须使用string。 dataType的格式。

    Rails.ajax({ url: url, type: "PATCH", data: {"post":{"category_id":thi ...

随机推荐

  1. Xsheel远程链接ECS,Xftp上传文件到ECS

    下载Xshell 工具:用来远程实现远程访问. 下载Xftp工具:方便用来上传文件. 下载方式直接百度搜索,如下如: 下载完成之后安装. 接下来就是链接云服务器了. 直接百度经验按照步骤来就OK了,如 ...

  2. codeforces之4.1学习记录

    记录一些之前没见过的代码: #include <bits/stdc++.h> using namespace std; typedef long long ll; #define INF ...

  3. PHP、thinkPHP5.0开发网站文件管理功能(二)删除文件

    1.is_dir():检查指定的文件是否是目录 2.scandir():返回指定目录中的文件和目录数组 3.unlink():删除文件,如果删除的文件不存在会报错,加@抑制报错 public func ...

  4. 查看linux系统各种参数配置的命令

    查看linux系统各种参数配置的命令 last |grep shutdown                             //查看上次关机时间 last |grep reboot     ...

  5. 虚拟机 ----- 最小安装如何安装设置ip ,并启用ifconfig命令

    解决办法: 步骤一:找到网卡 步骤二:修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 步骤三:执行命令 service ne ...

  6. component: resolve => require(['../pages/home.vue'], resolve)

    component: resolve => require(['../pages/home.vue'], resolve) vue 路由的懒加载 import Vue from 'vue' im ...

  7. ES6和ES5中的this指向问题

    不多逼逼 直接上代码: var name = "window"; var obj = { name: 'obj', //普通函数 one: function(){ console. ...

  8. Unity 双击Esc或者返回退出游戏,有文字提示

    第一次点击Esc或者返回,显示提示文字"再次按下返回键退出游戏",在文字消失之前再次点击Esc或者返回,退出游戏. 此脚本挂在Text文字提示上: using UnityEngin ...

  9. Murano Deployment

    2015-09-14 05:53:02 — Action deploy is scheduled 2015-09-14 05:53:03 — Unable to load due to 'could ...

  10. jQuery源代码学习笔记_bind

    一般想到JS的兼容性问题的时候,首先会想到addEventListener与attachEvent这一对冤家,那么我们先来看看它们有什么兼容性问题 addEventListener与attachEve ...