当前位置: 首页 > news >正文

芜湖炎黄做的网站/秦洁婷seo博客

芜湖炎黄做的网站,秦洁婷seo博客,wordpress登录用户错乱,梧州人才网有时候,我真会被传参搞得头晕,这样传要怎么接收,那样传又要怎么接收? get可以json吗?什么是json方式提交?等等问题,已困扰我许久 所以,在此想做个总结,整理一下思绪,不再为传收参烦恼!如有错误,望联系纠正,感谢!首先梳理一下HTTP的一些知识1.GET和POST请求,在传参…

有时候,我真会被传参搞得头晕,这样传要怎么接收,那样传又要怎么接收? get可以json吗?什么是json方式提交?等等问题,已困扰我许久 所以,在此想做个总结,整理一下思绪,不再为传收参烦恼!如有错误,望联系纠正,感谢!

首先梳理一下HTTP的一些知识

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上,如下图

b448685667bd9bb4b012cbe973c56bb8.png

(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字符串,无法解析,如下图

a29b35e1bf8d78dcb49208af438ecf17.png

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 void ajaxPost(@RequestBody String param){

JSONObject json = JSON.parseObject(param);

}

@PostMapping(value = "ajaxPost")

public void ajaxPost(@RequestBody User user){

}

@PostMapping(value = "ajaxPost")

public void ajaxPost(@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:参数默认值。即设置默认值后,没有传参时,会赋予参数一个默认值。设置了默认值,就算必须参数不传也不会报错

fbf6adf480e8c6a9acd22c0a7685f3dd.png

72b1aa0d20564c6d3f82bf20644c2835.gif

THANDKS

End -

一个立志成大腿而每天努力奋斗的年轻人

伴学习伴成长,成长之路你并不孤单!

http://www.lbrq.cn/news/1321129.html

相关文章:

  • wordpress360收录插件/关键词排名优化系统
  • 个人网站 模版 后台管理系统/网络推广的渠道
  • 我的电脑做网站服务器吗/免费网页在线客服系统
  • 环球资源网站什么时候做的/互联网推广有哪些方式
  • 公司网站建设征稿令/中国科技新闻网
  • 西宁网站建设哪家好/独立站网站
  • 静态网站开发课程相关新闻/专业排名优化工具
  • 用html制作旅游网站/seo网站搭建是什么
  • 设计做任务的网站/cps广告是什么意思
  • 做网站怎么上词/广东病毒感染最新消息
  • 建立网站报价/app开发自学教程
  • 汇云网站建设/独立站优化
  • 网站后台管理要求/网络营销策划书包括哪些内容
  • 网站定制 动易/免费网站统计代码
  • 青海省住房和城乡建设部网站/windows优化大师收费吗
  • 徐州做网站谁家最专业/seo建站公司
  • 成都网站建设收费/智能建站网站模板
  • 做外贸做独立网站划算吗/免费推广平台排行榜
  • dede做双语网站/怎么开通网站平台
  • 做网站设计制作公司/seo网站管理招聘
  • 怎么做盗版小说网站/太原seo优化公司
  • php网站开发教程图片/怎么找专业的营销团队
  • 厦门做网站公司/最有效的网络推广方式和策略
  • 租车网站建设/国家高新技术企业
  • 周口建设局网站/企业网站推广的方法
  • 找网站/长沙专业竞价优化首选
  • 个人公司网站怎么做/百度广告联盟平台
  • 建设商务网站公司/凡科建站登录
  • 富阳区建设工程质监站网站/百度站长工具网站提交
  • 天河建设网站开发/2022年最火的关键词
  • ctfshow_web签到题
  • Vue3中Markdown解析与渲染的完整解决方案:从安全到性能优化
  • Git基础命令大全
  • grafana/lock-stack 日志 Pipeline 配置
  • 大疆无人机开发:MQTT 赋能机场系统集成的Java实战之旅
  • CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)