getParameter只能提取x-www-form-urlencoded编码的数据?;常见的几种提交数据类型

Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported错误的多种解决方法及说明Content-Type Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported错误的多种解决方法及详细说明Content-Type 阅读详情
假设某个类型(json、text等)的数据已经通过servlet或者Ajax等技术封装到http协议的请求体中,再发送到后台;这时候你要从后台拿出数据。
这里介绍通过HttpServlet最原始的方法拿去,非框架技术;
doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
如何拿出来呢?
首先你要确定前台发过来的数据的类型,也是请求头信息“contentType”是什么;
1.第一种情况:
contentType为application/x-www-form-urlencoded;
Content-Type: application/x-www-form-urlencoded;
  • 最常见的 POST 提交数据的方式。
  • 浏览器的原生 表单,如果不设置 enctype 属性,那么最终无论post还是get方式,就都会以 application/x-www-form-urlencoded 方式提交数据。除此之外,使用Jquery封装的Ajax技术$.post{}里面如果没有设置contentType的参数那么最终也还是会以application/x-www-form-urlencoded 方式提交数据。
  • 这种类型提交的数据将按照 “key1=value1&key2=value2” 的方式进行编码放在请求体中(是get就放在url后面)。例:
a=1&b=2
  • 在后台如何提取?用request.getParameter(‘key’) 方法返回valued的值,在API文档里并没有说getParameter只能取x-www-form-urlencoded类型的数据,但对于其他类型,我尝试了,都取不出来。
第二种情况:
Content-Type: application/multipart/form-data
  • 用处:使用表单上传文件。让 表单的 enctype 等于 multipart/form-data。一般用来上传文件,各大服务端语言对它也有着良好的支持。当然它也支持用键值对的方法将数据存进请求体中。
  • 这种类型提交的数据将按照某种奇怪的方式进行编码放在请求体中。假如这里form表单有两个键值对,key1/key2及value1/value2。
  • 那么编码后存在于请求体中样子是这样的(它会用一条虚线隔开每个数据和数据以外的部分):
----------------------------p
Content-Disposition: form-data; name="key1"

value1
----------------------------p
Content-Disposition: form-data; name="key2"

value2
----------------------------p
第三种情况:
Content-Type:application/json
  • JSON 格式支持比键值对复杂得多的结构化数据,大多数浏览器都原生支持 JSON.stringify()将json对象转换成可以封装进请求体的字符串;
  • 前台ajax 使用案例:
$.ajax({
	method:"post",
	contentType:"application/json;charset=utf-8",
	dataType:"json",
	url:"/ServletProject/MyServlet",
	data:JSON.stringify({"key1":"value1","key2":"value2"}),
	//不用JSON.stringify()函数的data写法
	//data:"{\"key1\":\"value1\",\"key2\":\"value2\"}", 
	success:function(data){
		...
	}
});
  • 在无误的情况下,用json类型提交的数据将按照如下键值对格式放进request的请求体中;
{
	"key1":"value1",
	"key2":"value2"
}
  • 怎么取出来?如果单纯将一个json数据硬放进了request的话,request没有什么提取方法可以直接取出来;下面给出一种利用输入输出流硬取的参考方法。
int contentLength = request.getContentLength();
   	 byte buffer[] = new byte[contentLength];
   	 for (int i = 0; i < contentLength;) {
   		 int readlen = request.getInputStream().read(buffer, i,contentLength - i);
               if (readlen == -1) {
                   break;
               }
            i += readlen;
        }
   	 String getJson = new String(buffer);
   	 System.out.println(getJson);
打印台结果:
{"key1":"value1","key2":"value2"}
 - 在拿到 {"key1":"value1","key2":"value2"}结果后,
 - 可以导入并使用各中json处理jar包,如Json-lib等来将上面的格式转换成beans或者String类。
 - 或者直接用String类的分割方法硬拿value和key.
  • 用x-www-form-urlencoded辅助存取json数据格式:
  • ajax案例
$.ajax({
	method:"post",
	contentType:"application/x-www-form-urlencoded",
	dataType:"json",
	url:"/ServletProject/MyServlet",
	data:"data1={\"pwd\":\"222\",\"AAA\":\"111\"}&data2=5",
	success:function(data){
		...
	}
});
  • 后台要用request.getParameter(‘key’)来获取json格式的value值,然后利用工具进行转换beans。
String data = request.getParameter("data1");
JSONObject j1 = JSONObject.fromObject(data);
System.out.println("JSONObject:"+j1);
//打印台:
//{"pwd":"222","AAA":"111"}
  • 补充注意事项
  • 1 :之所以要用JSON.stringify()是因为js对象和json格式字符串还是有区别的;一是封装进去的必须是字符串而不是一个对象,其次是js对象的key可能不是字符串;所以要用stringify()确保无误;
  • 2:如果你在$.ajax({}) 里设置了contentType为application/json;但是你又把data部分的json数据格式给写歪了;比如有误又没有用stringify()处理,这样虽然你写的是{”a“ : “A”},但它还是会以application/x-www-form-urlencoded 给你进行编码,把数据格式编码成 a=A&b=B的格式传到后台。
  • 3:str 为{ “a” : 5 },传入前端然后为什么要用var json = eval("(" + str + “)”)处理一下?
    因为后台没有设置contentType为json, 需要处理一下也就是用eval转换一下,至于为什么加“( “ 和 ” )”,是为了避免当成一个函数这样没啥意义。
虽然框架非常好用能直接拿到各种request里数据,但我感觉知道更基础一点知识总会踏实一点;以上内容为个人的观点总结,有误的话可以指出来。
YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py 全网最详细的YOLOv5之推理部分detect.py源码逐行注释,近四万字的超详细讲解!小白入门必看! 阅读详情

相关推荐

FPGA工程师必看:JESD204B同步机制实战指南(含SYSREF信号调试技巧)

本文为FPGA工程师提供了一份JESD204B同步机制的实战指南,重点聚焦于SYSREF信号的调试技巧。文章从同步的核心逻辑出发,深入剖析了时钟、SYSREF与对齐序列这“三驾马车”的协作,并详细阐述了硬件PCB布局、FPGA IP核配置、状态机监控以及使用示波器进行波形分析等关键实战步骤,旨在帮助工程师解决多通道高速系统中的同步难题,确保链路的稳定与确定性延迟。

weixin_29239661的博客 330

form-data和x-www-form-urlencoded的区别和延伸

form-data和x-www-form-urlencoded,它们完整的表示是multipart/form-data和application/x-www-form-urlencoded。为了方便,我们下面就用form-data和x-www-form-urlencoded表示。两者的区别,可谓是老生常谈,随便百度一下,也是有大堆资料。好了,闲话少叙,我们进入正题。

代码君 1万+

别再只看pLDDT了!AlphaFold预测结果解读保姆级指南:pLDDT、PAE、pTM、ipTM到底怎么看?

本文详细解析了AlphaFold预测结果中的关键指标pLDDT、PAE、pTM和ipTM,帮助用户从单一依赖pLDDT进阶到全面理解蛋白质结构预测。通过实际案例和技巧,指导如何正确解读这些指标,避免常见错误,并提供了从预测到发表的实用建议。

weixin_29100399的博客 354

form-data、x-www-form-urlencoded、raw、binary的区别

在日常开发中,通常会因为提交数据的方式不同而导致各种各样的问题,归根结底是因为未能正确认识到POST方式上传数据的几种方式的区别。所以很有必要研究一下这几种提交方式的区别。 1、form-data方式。 表示http请求中的multipart/form-data方式,会将表单的数据处理为一条消息,用分割符隔开,可以上传键值对或者上传文件;比如按照如下方式传输提交数据。对于一段utf8编码的字节...

liangshitian的博客 2万+

lidar点云比赛-Southlidar软件使用入门

lidar点云比赛-Southlidar软件使用入门 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院: 智控无人机小组 写作时间:2020.09.29 一、软件资源及安装 1.下载地址: https://pan.baidu.com/s/1jN1pynmAZOqj5mMx774pVg 提取码:gkvv (资源来自南方测绘) 2.安装 进入链接,找到软件文件夹, 内含文件即为安装包 3.下载成功后按提示安装即可 4.安装成功后桌面自动创建一个快捷方式 二、界面布

qq_49621416的博客 4891

海康威视iVMS-8700综合安防管理平台 文件读取漏洞复现

HIKVISION iVMS 综合安防管理平台download接口处存在任意文件读取漏洞,攻击者通过构造token绕过身份认证,读取服务器中的目录信息与敏感文件。使系统处于极不安全的状态。

0xSec 3304

x-www-form-urlencoded、application/json到底是什么

在http协议中规定了GET、HEAD、POST、PUT、DELETE、CONNECT 等请求方式,其中比较常用的就是post和get,其中post用来向服务器提交数据,post只规定了提交的数据必须放在请求的中,但是并没有规定传输数据的编码方式。比较主流的有如下的几种编码方式 1.application/x-www-form-urlencoded (HTTP中默认的提交数据的方式) 2.multipart/form-data 3.application/json 4.text/xml

muzidigbig的博客 9309

【Bug已解决】Codex CLI 报 stream disconnected before completion 解决方案

方案适用场景推荐指数更新根证书库社区验证的最常见根因⭐⭐⭐⭐⭐检查系统时间虚拟机/容器等特殊运行环境⭐⭐⭐⭐核对 base_url 配置排除证书问题后的下一步排查⭐⭐⭐⭐更换网络环境测试怀疑本地网络设备存在干扰⭐⭐⭐升级到最新版本已知版本缺陷的场景⭐⭐⭐⭐报错虽然表现形式很像网络连接问题,但社区排查的多个真实案例表明,很大一部分情况的根因其实是本机系统的 TLS 证书信任链异常或系统时间不准确,而不是单纯的网络质量问题。优先检查并更新系统根证书库,这是社区验证过的高频根因。

一键难忘的博客 8017

application/x-www-form-urlencoded

请求头Content-Type为application/x-www-form-urlencoded 顾名思义,即这个url是被编码(encoded)过的。那么传参Form Data必须要encodeURIComponent(参数值)。 如果在前端未执行编码操作,那么后端将获取不到传过去的参数 如果在前端执行编码操作,那么后端将可以准确地收到传过去的参数 至于此时为什么后端可以准确地...

Winne_Shen的专栏 2万+

educoder中Hive综合应用案例 — 用户搜索日志分析

Hive综合应用案例 — 用户搜索日志分析

weixin_46026136的博客 4772

【2026华为OD新规机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 505

支持请求类型为application/x-www-form-urlencoded的对象参数注入

背景: 入职新公司后,最近在工作中开发业务代码时,发现controller层中的方法参数不能是自定义的对象形式,只能是一个一个的单个属性方法,对象只能是PageRequest与 FallsPageRequest类型的对象,所以,如果方法入参需要添加新字段,就需要在controller层方法中添加字段,这个字段很可能service层也需要使用,那么也还要修改service层的接口与实现类,如果这个service接口有许多实现类,你都要一个一个在方法中增加新字段,这样其实改造复杂度较高;如果是一个rpc的.

qq_37803406的博客 3516

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

x-www-form-urlencoded的含义解释,getReader()和getParameter()的区别

需要注意的是:并不是作为请求体发送的数据,就必须要用request.getReader()方法去读取前端传过来的数据,如果传输表单数据,可以用request.getParameter()方法获取参数。

小丁的博客 2691

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

关于application/x-www-form-urlencoded编码

http://hongjiang.info/http-application-x-www-form-urlencoded/ 同事遇到在servlet端通过request对象getInputStream读取POST过来的数据,却读不到的问题,怀疑是tomcat的问题。查了一下Content-type是application/x-www-form-urlencoded,估计是被解析成了par

yhjyumi的专栏 3911

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

由x-www-form-urlencoded引发的接口对接失败

先不管为什么缺这个会报错,这里展示了一个实用技巧,对于http接口来说,排查这种接口调用差异问题,最直接高效的方法,就是对比正确调用与错误调用的数据包!而正是因为它如此悠久,所以被采纳在了web服务器的实现标准中,几乎所有的web服务器,当发现ContentType是。从上面处理逻辑看,按道理小哥的调用方式与别人的调用方式都是支持的,理论上来说,小哥的调用方式会命中。我们接口基本都这样,使用base64将数据包了一层,许多年过去了,具体原因不详,不深究😂。这周正在写代码,突然,旁边小哥问我个问题...

m0_73311735的博客 941

request.getParameter()获取不到数据的问题

  最近做项目时,发现手机客户端通过http协议post方式上传数据到服务端,在服务器端通过request.getInputStream()能获取到相应的数据,但用request.getParameter()却获取不到数据。这是怎么回事呢,后来发现这种情况跟form表单的属性 enctype有关系。   HTML中的...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 1755

SpringBoot 出现 Content type application/x-www-form-urlencoded charset=UTF-8 not supported

SpringBoot 出现 Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported 问题点1: 如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。 如果是这种状况:就把传入到后台的一个属性属性的拆

weixin_45213302的博客 8296

request.getParameter()获取不到数据

HTML中的form表单有一个关键属性 Content-Type=application/x-www-form-urlencoded 或multipart/form-data。 1、 Content-Type="application/x-www-form-urlencoded"是默认的编码方式,当以这种方式提交数据时,HTTP报文中的内容是: Accept:*/* Acce...

WGH100817的博客 1679

HttpServletRequest getParameter 为 null

一、简介 HttpServletRequest 提供了 getParameter 方法,可以非常方便获取 get / post 请求中的参数信息,但是使用 getParameter 获取 post 参数是有条件的。 二、创建web 项目工程 1.TestServlet.java package servlet; import java.io.IOException; import javax.s...

Zllvincent的博客 8988

SpringBoot 出现 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

问题点1: 如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。 请求中传JSON时设置的Content-Type如果是application/json或者text/json时,...

feiyst的博客 43万+
上一篇: python中修改字符串方法
下一篇: 用matlab绘制图1中右图的圆、折线束及其包络线(心形线),请给出步骤及其实现原理,
wang__Ray
博客等级 码龄8年 59粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值