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收传参数方式总结相关推荐

  1. axios链接带参数_axios常见传参方式

    1:get请求 一般发送请求是这么写 axios.get('/user?id=12345&name=user') .then(function (res) { console.log(res) ...

  2. python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参...

    1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...

  3. java怎么跟qtp脚本传参数_QTP多个Action之间传递参数的方法详解

    脚本的朋友们都会碰到多个Action之间传递参数的问题,想当年我也是研究了好久才成功的,网上虽然有很多文章都在讲这个问题,但是大多都是雷同的抄来抄去不能解决实际问题,也有可能是我太笨了吧.下面我们来详 ...

  4. java 调用r语言包传参数_Java与R语言的配置,调用

    我是最近才接触到了R语言,所以用起来有很多的问题,之前只是想单纯想用java调用到R语言中的一些东西,没有想到这个事情并不是想象的那么简单的.好了,闲话不多说,下面我来说说我在运用R的时候遇上的问题吧 ...

  5. python一个函数可以有参数也可以没有参数_python 传入任意多个参数(方法调用可传参或不传参)...

    1.可传参数与不传参数,在定义中给参数设置默认值 class HandleYmal: """ 获取测试环境的配置 """ def __ini ...

  6. c#同时上传文件和参数,Java接收的完整教程,炒鸡简单!网上的教程弱爆了!

    工作需求,需要在c#端将文件和数据进行上传,Java端接收文件上传到oss,将数据处理到数据库. 这个教程,秒杀市面百分九十九的帖子,绝对是楼主精心打造! 一.网上的一般做法 网上搜出来的教程,基本都 ...

  7. java web传递参数_Javaweb的八种传值方式

    1.表单提交 html自带的from方法,简单易懂,便于操作,依靠于标签中的type="submit"进行表单传输,或者根据js进行控制提交表单.其中由method属性决定以pos ...

  8. java list namevaluepair_NameValuePair方式传参数

    今天工作中联调外部的一个接口用post方式传输,我按照文档封装参数成Jason字符串传入,但是对方一直接受参数为空,折腾了半天也没找到问题.很苦恼,检查代码都没有错误,可是为什么对方接受参数为空呢?然 ...

  9. java 通过Ajax前台传参数 并用 HttpURLConnection Post方式访问对外的接口

    前两天做项目遇到一个问题,就是在自己的项目中要去访问项目外部的接口,从自己的项目中传参数过去,通过调用 对方提供的接口去获取想要得到的数据!第一次接触到在自己项目中去访问和调用外部的资源,然后在网上去 ...

最新文章

  1. 人工智能医疗是把双刃剑,“对抗性攻击”后可导致误判
  2. Spring4学习笔记
  3. java有几个关键字,Java多线程常用的几个关键字
  4. (王道408考研操作系统)第二章进程管理-第一节2:进程状态及其切换
  5. 【Java】application run failed Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and
  6. php macro,如何利用 macro 方法来扩展 Laravel 的基础类的功能
  7. 计算机考研408的优势和劣势,为什么说计算机考研408是大趋势
  8. Northwind 数据库 多版本
  9. dw中html5快捷键,Adobe Dreamweaver(dw)常用快捷键--系统之家
  10. 、用ecshop整合淘宝客api改造用于淘宝客程序
  11. LeetCode(数据库)- 计算税后工资
  12. 在 JavaScript 中如何克隆对象?
  13. 开题报告:基于java新冠疫苗在线预约系统 毕业设计论文开题报告模板
  14. 鸿蒙是什么动物,悟空是猴,八戒是猪,沙和尚是什么动物?乌巢禅师一句话说出答案...
  15. 西方金融交易员揭露行业潜规则
  16. node js 运行服务器,node.js – NodeJS服务器如何运行
  17. 海思YOLOv3 wk模型在nnie设备上面推理
  18. 测试计划与手动和自动化项目有何不同?
  19. html显示时钟 翻页 js,js css3翻页数字时钟代码
  20. 【Unity】防反编译之windows平台加密dll

热门文章

  1. Linux学习总结(58)——生产环境运维故障处理指南
  2. Git学习总结(9)——如何构建你自己的 Git 服务器
  3. linux经典脚本实例,Linux常用Shell脚本珍藏
  4. 借助Docker,在win10下编码,一键在Linux下测试
  5. docker中java应用new FileOutputStream直接报Input/output error
  6. jQuery文档操作之删除操作
  7. dialog窗口编程的入门使用
  8. 【Away3D代码解读】(一):主要类及说明
  9. 项目中会用到的开源项目列表
  10. 『後起Android开发02』对SharedPreferences和Toast的简单封装