java接收参数_javaWeb收传参数方式总结
1.GET和POST请求,在传参方面有什么区别
GET传输的数据存储在URL上进行拼接 POST传输的数据存储在Requst Body(请求体)中
2.http请求中的Content-Type
http的请求头和响应头中都有Content-Type字段,这个字段向我们说明了请求和响应的HTTP body(请求体或响应体)存储了什么类型的数据,然后客户端和服务端就可以根据http头部得Content-Type正确解码HTTP body内容。
关联第1点:GET方式的请求和Content-Type是没有任何关系的,因为GET请求的数据在URL上。
这里我们分为3种情况说明如何传参与接参,分别为GET方式请求、表单提交、Json提交
1.GET方式请求
(1).普通URL get请求
http://localhost:8080/ajaxGet?id=1&username=用户名&userTrueName=真实姓名
//get也可以传json,通过参数传json字符串,然后后端进行解析(不过一般都不这么做)
http://localhost:8080/ajaxGet?user={"id":"1","username":"用户名","userTrueName":"真实姓名"}
(2).表单类GET请求
(3).AJAX Get请求
(A)正确示例
$.ajax({
type: "GET",
url: "http://localhost:8080/ajaxGet",
data:{"id":1,"username":"用户名","userTrueName":"真实名称"},
//contentType:'application/x-www-form-urlencoded'
contentType:'application/json'
});
注意:
1.data必须为json对象
2.实际上无需设置contentType
示例中我故意设置了contentType,但其实不管设置成什么都是无效的,因为传输的数据会在发送请求时,对Json对象进行编码解析,拼接到URL上,如下图
(B)错误示例(data为json字符串)
//data为json字符串
$.ajax({
type:"GET",
url:"http://localhost:8080/ajaxGet",
data:JSON.stringify({"id":1,"username":"用户名","userTrueName":"真实名称"}),//contentType:'application/x-www-form-urlencoded'
contentType:'application/json'});
GET请求时,data不能使用json字符串,无法解析,如下图
SpringMvc接收参数方式
1.实体类接收
2.Map接收,必须使用@RequestParam注解
3.拆开单个参数接收(参数少的情况可使用)
2.Form表单提交
ps:针对POST,第一点包含了所有GET请求方式
form表单提交一般说的是content-type为x-www-form-unlencoded或multipart/form-data的请求
(1)传统form表单提交,默认content-type为x-www-form-unlencoded,如下
(2) 含文件的form表单,需要指明enctype为 multipart/form-data(enctype相当于content-type)
(3) Ajaxform表单提交
//data为json对象
$.ajax({
type:"POST",
url:"http://localhost:8080/ajaxPost",
dataType:'json',
data:{"id":1,"username":"用户名","userTrueName":"真实名称"},
contentType:'application/x-www-form-urlencoded'});
SpringMvc接收参数方式
1.实体类接收 2.Map接收,必须使用@RequestParam注解 3.拆开单个参数接收(参数少的情况可使用) 4.后台的file文件需要使用MultipartFile类型接收
3.Json提交
ps:针对POST,第一点包含了所有GET请求方式
Json提交一般说的是content-type为application/json的请求,传输的Json是Json字符串
正确示例
//注意:data为json字符串 contentType为application/json
$.ajax({
type:"POST",
url:"http://localhost:8080/ajaxPost",
dataType:'json',
data:JSON.stringify({"id":1,"username":"用户名","userTrueName":"真实名称"}),
contentType:'application/json;charset=urf-8'});
注意:data为Json字符串,这个很重要
SpringMvc接收参数方式
必须使用@RequestBody注解
1.字符串接收,然后对Json字符串解析转换
2.实体类接收
3.Map接收
如下:
@PostMapping(value = "ajaxPost")public voidajaxPost(@RequestBody String param){
JSONObject json=JSON.parseObject(param);
}
@PostMapping(value= "ajaxPost")public voidajaxPost(@RequestBody User user){
}
@PostMapping(value= "ajaxPost")public voidajaxPost(@RequestBody Map map){
}
总结:1.GET请求方式与Form提交,后端spingMvc接收参数方式相同,如下
(1)实体类接收
(2)Map接收,必须使用@RequestParam注解
(3)拆开单个参数接收(参数少的情况使用)
(4)后台的file文件需要使用MultipartFil类型接收(form表单文件提交)
2.Json提交必须使用@RequestBody注解
(1)字符串接收,然后对json字符串解析转换
(2)实体类接收
(3)Map接收
3.建议:
(1)参数少的查询使用Get请求,参数多可使用Post
(2)涉及到数据库的修改操作,使用Post请求
(3)Post请求统一使用Json提交(即content-type=application/json),统一方式方便前后端联调,json传参灵活
(4)参数多的,使用实体类接收,因为Map含有参数的不确定性,根本看不出你需要的啥参数,宁愿新建一个实体类接收参数,可增强代码的可读性
比如使用swagger api文档时,可使用注解标注的实体类对应参数,但用map的话,你要啥参数,鬼知道咯~
拓展知识:@RequestParam注解
其实使用注解@RequestParam就等同于request.getParamter获取参数 但@RequestParam有更多的用处,它有以下几个重要属性
(1).value:前端传参的参数名称,这个属性可以使得前端参数名字与方法参数名不相同,使用这个参数进行数据绑定就ok了
//前端传参可以是"name" 方法参数中为"userName"//使用@RequestParam("name")可将name和userName进行绑定//即可使用userName接收name的数据 @RequestMapping("/test")
public void test(@RequestParam("name") String userName)){
}
(2)requried:表示是否是必须的参数,默认为true,所以加上@RequestParam,默认这个参数就是必须的,如果没有传对应参数会报错
(3)defaultValue:参数默认值。即设置默认值后,没有传参时,会赋予参数一个默认值。设置了默认值,就算必须参数不传也不会报错
java接收参数_javaWeb收传参数方式总结相关推荐
- axios链接带参数_axios常见传参方式
1:get请求 一般发送请求是这么写 axios.get('/user?id=12345&name=user') .then(function (res) { console.log(res) ...
- python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参...
1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...
- java怎么跟qtp脚本传参数_QTP多个Action之间传递参数的方法详解
脚本的朋友们都会碰到多个Action之间传递参数的问题,想当年我也是研究了好久才成功的,网上虽然有很多文章都在讲这个问题,但是大多都是雷同的抄来抄去不能解决实际问题,也有可能是我太笨了吧.下面我们来详 ...
- java 调用r语言包传参数_Java与R语言的配置,调用
我是最近才接触到了R语言,所以用起来有很多的问题,之前只是想单纯想用java调用到R语言中的一些东西,没有想到这个事情并不是想象的那么简单的.好了,闲话不多说,下面我来说说我在运用R的时候遇上的问题吧 ...
- python一个函数可以有参数也可以没有参数_python 传入任意多个参数(方法调用可传参或不传参)...
1.可传参数与不传参数,在定义中给参数设置默认值 class HandleYmal: """ 获取测试环境的配置 """ def __ini ...
- c#同时上传文件和参数,Java接收的完整教程,炒鸡简单!网上的教程弱爆了!
工作需求,需要在c#端将文件和数据进行上传,Java端接收文件上传到oss,将数据处理到数据库. 这个教程,秒杀市面百分九十九的帖子,绝对是楼主精心打造! 一.网上的一般做法 网上搜出来的教程,基本都 ...
- java web传递参数_Javaweb的八种传值方式
1.表单提交 html自带的from方法,简单易懂,便于操作,依靠于标签中的type="submit"进行表单传输,或者根据js进行控制提交表单.其中由method属性决定以pos ...
- java list namevaluepair_NameValuePair方式传参数
今天工作中联调外部的一个接口用post方式传输,我按照文档封装参数成Jason字符串传入,但是对方一直接受参数为空,折腾了半天也没找到问题.很苦恼,检查代码都没有错误,可是为什么对方接受参数为空呢?然 ...
- java 通过Ajax前台传参数 并用 HttpURLConnection Post方式访问对外的接口
前两天做项目遇到一个问题,就是在自己的项目中要去访问项目外部的接口,从自己的项目中传参数过去,通过调用 对方提供的接口去获取想要得到的数据!第一次接触到在自己项目中去访问和调用外部的资源,然后在网上去 ...
最新文章
- 人工智能医疗是把双刃剑,“对抗性攻击”后可导致误判
- Spring4学习笔记
- java有几个关键字,Java多线程常用的几个关键字
- (王道408考研操作系统)第二章进程管理-第一节2:进程状态及其切换
- 【Java】application run failed Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and
- php macro,如何利用 macro 方法来扩展 Laravel 的基础类的功能
- 计算机考研408的优势和劣势,为什么说计算机考研408是大趋势
- Northwind 数据库 多版本
- dw中html5快捷键,Adobe Dreamweaver(dw)常用快捷键--系统之家
- 、用ecshop整合淘宝客api改造用于淘宝客程序
- LeetCode(数据库)- 计算税后工资
- 在 JavaScript 中如何克隆对象?
- 开题报告:基于java新冠疫苗在线预约系统 毕业设计论文开题报告模板
- 鸿蒙是什么动物,悟空是猴,八戒是猪,沙和尚是什么动物?乌巢禅师一句话说出答案...
- 西方金融交易员揭露行业潜规则
- node js 运行服务器,node.js – NodeJS服务器如何运行
- 海思YOLOv3 wk模型在nnie设备上面推理
- 测试计划与手动和自动化项目有何不同?
- html显示时钟 翻页 js,js css3翻页数字时钟代码
- 【Unity】防反编译之windows平台加密dll