博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot 与 ajax
阅读量:4972 次
发布时间:2019-06-12

本文共 5816 字,大约阅读时间需要 19 分钟。

不同的传递方式(POST & GET)会将传递的数据存储到不同的位置,而针对不同的存储位置而言后端读取的方式也是不一而同的。

我先说明一下问题场景:我在edit.HTML 界面中用自定义的脚本配合控件使用ajax函数进行提交数据

脚本长这样

/** * 保存 */function saveForm() {    console.log($("#fm").serialize());// 序列化    var data = {            'id' : $('input[name="id"]').val(),            'powerFreq' : $('input[name="powerFreq"]').val(),            'ratedVol' : $('input[name="ratedVol"]').val()    };    console.log(JSON.stringify(data));// json转化为字符串    $.ajax({        url : '/mes/ratedVolPowerFreq/save',        type : 'GET',/*POST*/        contentType : 'application/json',        dataType : 'json',        data : data,/*JSON.stringify(data),*/        success : function(result) {            if (!result.success) {                showAlertDlg('保存失败!' + result.message);                return;            }            layer.msg('保存成功!', {                icon : 1,                time : 1000            }, function() {                window.location.href = '/mes/ratedVolPowerFreq/list';            });        }    });}

当我们使用GET方法进行数据提交的话

Springboot controller层接收数据部分长这样

/**     * 保存功能     * @throws IOException     * @throws UnsupportedEncodingException     */    @RequestMapping(value = "/save")    @ResponseBody    public JsonResult
Save(@RequestParam(value = "id") Integer id1,@RequestParam(value = "powerFreq") Double powerFreq,@RequestParam(value = "ratedVol") Double ratedVol){ System.out.println("+++++++++++++++++++++++++++++++++"); System.out.println(id1); System.out.println(powerFreq); System.out.println(ratedVol); boolean test = true; if (test) { return new JsonResult<>(false,"傻逼 Σ(☉▽☉‘a"); } System.out.println("+++++++++++++++++++++++++++++++++"); }

注意:这种ajax方法传递中数据部分可以使用Json数据、也可以使用序列化$("#fm").serialize()字符串 但是!!!不能是JSON.stringify(data)不然回报Invalid character found in the request target. 

但是!

我们使用使用ajax-POST方法进行数据提交的时候

就会一直报错:Required Integer parameter 'id' is not present

/** * 保存 */function saveForm() {    console.log($("#fm").serialize());    var data = {            'id' : $('input[name="id"]').val(),            'powerFreq' : $('input[name="powerFreq"]').val(),            'ratedVol' : $('input[name="ratedVol"]').val()    };    console.log(JSON.stringify(data));    $.ajax({        url : '/mes/ratedVolPowerFreq/save',        type : 'POST',        contentType : 'application/json',        dataType : 'json',        data : JSON.stringify(data),        success : function(result) {            if (!result.success) {                showAlertDlg('保存失败!' + result.message);                return;            }            layer.msg('保存成功!', {                icon : 1,                time : 1000            }, function() {                window.location.href = '/mes/ratedVolPowerFreq/list';            });        }    });}

SpringBoot - controller层

/**     * 保存功能     * @throws IOException     * @throws UnsupportedEncodingException     */    @RequestMapping(value = "/save")    @ResponseBody    public JsonResult
Save(@RequestBody RatedVolPowerFreq curRVPF){ Integer id = curRVPF.getId(); if (id == null) { curRVPF.setCreator(SessionUtils.getLoginUser()); curRVPF.setCreateTime(DateUtils.getCurDate()); curRVPF.setModifyTime(DateUtils.getCurDate()); ratedVolPowerFreqService.insert(curRVPF); }else { RatedVolPowerFreq temRVPF = ratedVolPowerFreqService.findById(id); temRVPF.setRatedVol(curRVPF.getRatedVol()); temRVPF.setPowerFreq(curRVPF.getPowerFreq()); temRVPF.setModifyTime(DateUtils.getCurDate()); ratedVolPowerFreqService.update(temRVPF); } return new JsonResult<>(true,"保存成功!"); }

注意:这种ajax方法传递中数据部分禁止使用Json数据和序列化$("#fm").serialize(),回报:Unrecognized token 'id': was expecting ('true', 'false' or 'null')(无法识别“id”)的错误,

只能使用JSON.stringify(data)进行传递数据

 

关于http ajax操作的两种方法详解

两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。

  • GET - 从指定的资源请求数据
  • POST - 向指定的资源提交要处理的数据

GET 基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。

POST 也可用于从服务器获取数据。不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据。

Get和Post都是向服务器发送的一种请求,只是发送机制不同。

 

1. GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器。当然在Ajax请求中,这种区别对用户是不可见的。

 

2. 首先是"GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。

 

3. GET方式请求的数据会被浏览器缓存起来,因此其他人就可以从浏览器的历史记录中读取到这些数据,例如账号和密码等。在某种情况下,GET方式会带来严重的安全问题。而POST方式相对来说就可以避免这些问题。

 

get请求和post请求在服务器端的区别:

4. 在客户端使用get请求时,服务器端使用Request.QueryString来获取参数,而客户端使用post请求时,服务器端使用Request.Form来获取参数.

 

HTTP标准包含这两种方法是为了达到不同的目的。POST用于创建资源,资源的内容会被编入HTTP请示的内容中。例如,处理订货表单、在数据库中加入新数据行等。

当请求无副作用时(如进行搜索),便可使用GET方法;当请求有副作用时(如添加数据行),则用POST方法。一个比较实际的问题是:GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制。
若符合下列任一情况,则用POST方法:
* 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。
* 若使用GET方法,则表单上收集的数据可能让URL过长。
* 要传送的数据不是采用7位的ASCII编码。
若符合下列任一情况,则用GET方法:
* 请求是为了查找资源,HTML表单数据仅用来帮助搜索。
* 请求结果无持续性的副作用。
* 收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符。

 

对比

有关 GET 请求的其他一些注释:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

有关 POST 请求的其他一些注释:

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求

下面的表格比较了两种 HTTP 方法:GET 和 POST。

  GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
对数据长度的限制 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 无限制。
对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。

转载于:https://www.cnblogs.com/supperlhg/p/9327996.html

你可能感兴趣的文章
highcharts 图表实例
查看>>
ubuntu下如何查看用户登录及系统授权相关信息
查看>>
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
笔记:git基本操作
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
执行了的程序,才是你的程序.
查看>>