一、问题描述  

  最近在写接口程序,该接口需要与其他公司的程序对接。对方发送content-type:multipart/form-data类型的参数,结果通过request.getParameter(param)方法怎么也获取不到参数。

二、解决方案

  1、通过request.getInputStream()方法获取输入流,然后再截取自己需要的字符串(参数),如下(参考代码)

      

           ServletInputStream in = request.getInputStream();
       BufferedReader br = new BufferedReader(new InputStreamReader(in));
      StringBuilder sb = new StringBuilder();
       String line;
      while((line = br.readLine()) != null){
      sb.append(line);
       }         //String param = sb.substring(sb.indexOf(""), sb.lastIndexOf("")+1);

   2、通过apache-commons组件实现。需要jar包:commons-fileupload-1.3.1.jar,commons-io-2.4.jar。如下(参考代码)

        

//解析参数
         private Map<String, String> getParams(HttpServletRequest request) {
       DiskFileItemFactory factory = new DiskFileItemFactory();
      ServletFileUpload upload = new ServletFileUpload(factory);
       upload.setHeaderEncoding("UTF-8");
       List<FileItem> items;
       Map<String, String> param = null;
       try {
       items = upload.parseRequest(request);
       param = new HashMap<String, String> ();
       for(FileItem fileItem:items){
       if (fileItem.isFormField()) {
       param.put(fileItem.getFieldName(), fileItem.getString("utf-8"));//如果你页面编码是utf-8的
       }
       }
       } catch (FileUploadException e) {
       e.printStackTrace();
       } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
       }
        return param;
       }

      通过调用该方法,获取参数map,然后用map.get(paramName),获取相应参数的值。

   3、springmvc框架方式。需要配置CommonsMultipartResolver。如下(参考代码)

    <!-- 配置Multipart解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:maxUploadSize="500000"></bean>

    在controller通过以下方式获取参数名为"content"的值,如下(参考代码)

    @RequestMapping(value = "/importOrder", method = RequestMethod.POST )
public String importOrder(@RequestParam(value="content") String content){
     content = new String(content.getBytes("ISO-8859-1"), "utf-8");
System.out.println(content);
return "success";
}

  

三、总结

    两种方法,相对来说第二种更好一些。不过需要注意的是:如果先调用了request.getInputStream()方法,则不能再用request.getParameter(param)方法获取参数,因为前者会将请求数据清空。

接收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. html5 file upload and form data by ajax

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

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

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

  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. 转载 SharePoint【Site Definition 系列】– 创建Content Type

    转载原地址:  http://www.cnblogs.com/wsdj-ITtech/archive/2012/09/01/2470274.html Sharepoint本身就是一个丰富的大容器,里面 ...

  6. 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 ...

  7. springMVC接收参数的区别form data与query string parameters与request payload

    在AJAX请求中,我见过有三种form表单数据类型提交. 第一种:form data, 第二种:query string parameters,第三种:request payload. 在google ...

  8. springMVC中对HTTP请求form data和request payload两种数据发送块的后台接收方式

    最近在做项目中发现,前台提交数据时,如果通过form表单提交和ajax发送json时,springMVC后台接收不能都通过@ModelAttribute方式处理,经过一番查找后,ajax发送json请 ...

  9. .NET获取文件的MIME类型(Content Type)

    第一种:这种获取MIME类型(Content Type)的方法需要在.NET 4.5之后才能够支持,但是非常简单. 优点:方便快捷 缺点:只能在.NET 4.5之后使用 public FileResu ...

随机推荐

  1. MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用

    MongoDB的下载地址:http://www.mongodb.org/downloads. 下载好直接解压安装包,即可使用. bin目录下的几个文件说明: mongo 客户端程序,连接MongoDB ...

  2. Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误

    今天开发那边升级.改造系统过程中,在测试服务器碰到关于ASP程序连接ORACLE数据库的小问题,虽然是小问题,但是整起来真要命啊,花了不少时间,主要是ASP程序啊,这种上古神器,哥还是当年毕业的时候弄 ...

  3. Solr与HBase架构设计

    摘要:本篇是本人在做一个大数据项目时,对于系统架构的一点总结,如何在保证存储量的情况下,又能保证数据的检索速度. 前提:      Solr.SolrCloud提供了一整套的数据检索方案,HBase提 ...

  4. 将Session写入数据库

    使用session_set_save_handler()函数,将Session的内容写入数据库 <?php /* *@author Fahy *@link http://home.cnblogs ...

  5. nyoj 42 一笔画问题 欧拉路径

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42 欧拉回路,欧拉路径水题~ 代码: #include "stdio.h&quo ...

  6. mysql主从同步问题解决汇总

    出现问题原因:出现这个问题的原因是之前曾做过主从复制!问题:ERROR 1201 (HY000): Could not initialize master info structure; more e ...

  7. 设置html的div中背景图片长宽

    使用以下可行 background-size:1040px 482px;

  8. 嵌入式Linux应用程序开发详解------(创建守护进程)

    嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...

  9. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  10. linux启动jmeter,执行./jmeter.sh报错解决方法

    1.l-bash: ./jmeter.sh: Permission denied解决办法:jmeter.sh的执行权限改改,是权限不够chmod 777 jmeter.sh 2.An error oc ...