POST提交数据,请求头的Content-Type的设置对获取数据方式的影响

这个问题在对接国外一家开发商的时候出现,在他们沙箱环境里,他们POST提交XML给我,按理应该在request.getInputStream()里把数据读出来,但我却读不出来,反而能直接循环request.getParameterMap().keySet()里找到对应的主键,相应找到value就开始对接了,当时也没过多的在意,等到对接完成,接入他们的正式环境时,我却读不到任何数据了,这个。。。

对方刚开始认为是我这边代码有问题,我也很坚定我的看法沙箱环境和正式环境到底有什么差异,对方技术很肯定的说没有差异,都是一样的代码, 无法解释为什么沙箱与正式会这样。面对这样,再说下去也解决不了,开始求助网上高手的经验,找到了一篇关于content-type设置对POST接收数据问题的文章,这确实提醒了我当初为什么能request.getParameterMap().keySet()来读数据,通过获取请求头里的content-type,原来对方沙箱的请求头里content-type是没有设置的(默认application/x-www-form-urlencoded),而正式环境却是:text/xml。

问题解决,用request.getInputStream读数据,这次问题很感谢那位哥们的文章:http://my.oschina.net/haogrgr/blog/294995 , 谢谢。

时间: 2024-10-10 16:47:18

POST提交数据,请求头的Content-Type的设置对获取数据方式的影响的相关文章

用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢nodejs路由和Ajax之间的数据传输,也就是表单提交,然后在用nodejs把数据写入mysql数据库 用到的东西比较多,但是还是很有趣的 1.安装node.js 安装node.js,直接去官网下载然后根据需求点击下一步就好了 Node.js安装包及源码下载地址为:https://nodejs.org

自定义类实现基于数组/字典Literal Syntax设置和获取数据

.h文件 #import <Foundation/Foundation.h> @interface TestKVC : NSObject {          NSMutableDictionary *mDictionary;     NSMutableArray *mArray; } - (void)setObject:(id)object forKeyedSubscript:(id < NSCopying >)aKey; - (id)objectForKeyedSubscrip

ajax中的setRequestHeader设置请求头

1.问题引发点: 前不久发现一个问题: 前端并没有设置请求头信息里面的Accept-Encoding:gzip...但是在请求头中可以明显的看到Accept-Encoding:gzip, deflate, sdch,并且我尝试修改这个请求头,发现 不 生 效: 2.XMLHttpRequest对象提供了一个设置请求头的方法:setRequestHeader,对应的jQuery可以再beforeSend回调里面设置请求头: $.ajax({ type: "GET", url: "

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

很久没从头到尾搭框架,今天搭的过程中,springmvc controller方法入参用@RequestBody自动绑定参数时一直提示各种 not supported 排查问题有两个解决路径: 1)使用post协议提交时,请检查Content type类型,如: $.ajax({ type: "POST", contentType: "application/json;charset=UTF-8", url: "/reg", data: JSON

给RabbitMQ发送消息时,设置请求头Header。

消费者 由于消费者那里,@Payload是接受的消息体,使用了@Header注解,需要请求头,生产者这边就要设置,如下代码: 这是RabbitTemplate中的converAndSend(exchang,routingKey,消息体,消息头)方法. @Override public void convertAndSend(String exchange, String routingKey, final Object message, final MessagePostProcessor me

HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP

REMOTE_ADDR 表示发出请求的远程主机的 IP 地址,remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP x_forwarded_for 简称XF

十、Vue Router 进阶-获取数据

获取数据的两种方式 导航完成之后获取数据:先完成导航,然后在接下来的组件生命周期钩子created中获取数据.在数据获取期间展示一个loading加载中的状态提示. 导航完成之前获取:导航完成前,在路由进入的守卫中获取数据,在数据获取成功后执行导航. 导航完成之后获取数据(可展示loading) 在组件的created钩子中获取数据.在获取数据期间展示一个loading状态,可以在不同视图间展示不同的loading状态. <template> <div class="post&

使用ivx实现分页获取数据的经验总结

在实际案例中我们经常需要展示一些数据,而这些数据都是存放在后台的数据库之中的而且可能数量庞大,在前台的界面中一下子全都展示出来肯定是不现实的,另外一次性让后台传输如此多的数据到前台也会有很大的延迟,使用户体验较差.因此,我们就需要采取一种分页的方式来少量多次的获取数据,这样用户每次操作之后都能很快得到反馈,同时前台也不用存放很多数据造成案例卡顿,今天就来说说如何实现这种分页效果.1.组件结构Demo中的结构比较简单,页面下放置了一个列作为案例主体,列内添加了一个分页组件,还有一个for容器用于循

Java从控制台获取数据的方法

一.使用System.in.read()一次获取一个字节 输入再多数据,只会获取第一个字节的int形式.获取的是字节,而不是字符,所以如果输入中文字符,强转后会得到乱码 1 try { 2 int in_num=System.in.read(); //获取的是一个字节的int类型 3 System.out.println("强转前:"+in_num); 4 System.out.println("强转后:"+(char)in_num); 5 } catch (IOE