spring mvc ajax表单后期处理,可能的方法及其优缺点

cu6pst1q  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(346)

就目前的情况来看,这个问题并不适合我们的问答形式。我们希望答案能得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或广泛讨论。如果您觉得这个问题可以改进,并可能重新打开,请访问帮助中心寻求指导。
8年前关门了。
我目前正在学习使用springmvc。在开发过程中,我使用了ajax和jquery的四种不同的表单处理方式。现在,我想知道每种方法的优点和缺点是什么。还有其他的吗?
假设我们有一个非常简单的表单,只有2个输入

  1. <input id="name" type="text" value"Name">
  2. <input id="active" type="checkbox">
  3. <input type="button" onclick="submitForm()">

假设我们不验证客户端和服务器站点上的数据。我们还将省略处理返回的数据。我只是对发送数据到服务器感兴趣。现在我们如何处理提交?我的解决方案是:
1.基于pathvariable的请求
js发送请求的方式如下:

  1. function submitForm() {
  2. var name = jQuery("#name").val();
  3. var active = jQuery("#active").is("checked");
  4. jQuery.ajax("/Submit/Name/" + name + "/Active/"+ active + "/",
  5. {
  6. type:"POST"
  7. });
  8. }

以及控制器:

  1. @RequestMapping(value="/Submit/Name/{name}/Active/{active}/",method=RequestMethod.POST)
  2. publis void submitForm(@PathVariable String name, @PathVariable Boolean active)
  3. { //something not important here }

在我看来是专业人士
在控制器中快速接收数据的方法,简单的注解使其工作
基本数据类型的类型加工(字符串、布尔值、数字)
欺骗
请求地址随需要的数据而增长
url中的特殊字符有问题吗?我不太清楚,但我记得我的队友有问题 / 用作发送到服务器的数据中的字符
2.带数据的请求
我不知道如何命名,但这是js文件中的想法:

  1. function submitForm() {
  2. var name = jQuery("#name").val();
  3. var active = jQuery("#active").is("checked");
  4. var object = {name:name,active:active};
  5. jQuery.ajax("/Submit/",
  6. {
  7. type:"POST",
  8. data: object
  9. });
  10. }

和控制器:

  1. @RequestMapping(value="/Submit/",method=RequestMethod.POST)
  2. publis void submitForm(@RequestParam(value="name") String name, @RequestParam(value="active") Boolean active)
  3. { //something not important here }

在我看来,与第一种方法没有太大区别,但是:
赞成的意见
较短的请求地址
欺骗
具有许多参数的方法声明可能非常庞大
3.将json作为pathvariable发送到服务器
在js文件中:

  1. function submitForm() {
  2. var name = jQuery("#name").val();
  3. var active = jQuery("#active").is("checked");
  4. var object = {name:name,active:active};
  5. jQuery.ajax("/Submit/" + JSON.stringify(object),
  6. {
  7. type:"POST"
  8. });
  9. }

和控制器

  1. @RequestMapping(value="/Submit/{json}",method=RequestMethod.POST)
  2. publis void submitForm(@RequestParam(value="name") String name, @RequestParam(value="active") Boolean active)
  3. {
  4. //now we are actually doing sth important here, cause we need to parse JSON
  5. }

赞成的意见
短请求地址
简短方法声明
欺骗
我自己解析json
4.json作为类Map的requestbody
我最喜欢的方法,但并不总是可行的,因为我们需要编写多个类来 Package 发送的数据,js:

  1. function submitForm() {
  2. var name = jQuery("#name").val();
  3. var active = jQuery("#active").is("checked");
  4. var object = {name:name,active:active};
  5. jQuery.ajax("/Submit/",
  6. {
  7. type:"POST",
  8. data:JSON.stringify(object)
  9. });

和java代码:

  1. public class Wrapper {
  2. private String name;
  3. private Boolean active;
  4. //getters and setters
  5. }
  6. @RequestMapping(value="/Submit/",method=RequestMethod.POST)
  7. publis void submitForm(@RequestBody Wrapper wrapper)
  8. {
  9. //all data available with Wrapper class
  10. }

赞成的意见
Map到所需对象
快速简单
欺骗
我们需要为发送到服务器的每个数据编写 Package 器
我现在只知道这些。我会感激你的批评,更好的解决方案或任何建议。谢谢!

oyjwcjzk

oyjwcjzk1#

(1) 基于pathvariable的请求
正如你所说的,你会遇到特殊角色的问题(例如 / ). 如果留短的话,基于路径的URL是最可读的。例如。, /hotel/{h}/room/{r} . 有时 path 以及 request 参数用于表示 mandatoryoptional 参数。
(2) 带数据的请求
这将是一个很好的方法,让您可以灵活地添加/删除 Request Parameters 以及管理不同的参数组合。
(3) 将json作为pathvariable发送到服务器
我认为这种方法的技术问题与 (1) . 如果没有正确的转义(而spring在当前编写时无法处理) / 在任何形式)这一选择是不可行的。 (4) 就是这样做的方法。
(4) json作为类Map的requestbody
这对于复杂对象更为可取。通常,spring可以帮助您直接将jsonMap到java对象。折衷的办法是,它不能像在浏览器上那样容易地进行测试。我相信这是restful服务中的一种常见模式,尽管它不一定要求传输技术。
总之,
使用查询参数很简单,用户可以直接从浏览器地址栏测试服务。
在请求体中使用对象有助于获得处理复杂数据的灵活性,但无法从浏览器中轻松测试。
路径变量选项不适用于spring,除非格式良好的数据没有特殊字符,例如 / 已提交。

iyzzxitl

iyzzxitl2#

我主要做1,2和4。
springroo将自动生成1、2和4的代码。
1、2和4在很大程度上取决于你是否在做一件事 POST , GET , PUT , DELETE (分别为积垢)。
数字1-路径变量
几乎总是 GET 对于单个项目。这是读入积垢。
数字2-请求参数
对于真正的rest,这应该是可选参数,比如分页列表或使用 GET . 不应该有请求主体。
为了 POST 它还用于老式的rest,最重要的是用于传统的html表单(aka) application/x-www-form-urlencoded .
这一点很重要,因为这一点对人们来说要容易得多 POST 比4强。
第三,不要这样做。
其他人已经说明了原因。
第四,json请求主体
几乎每次都是这样 POST 以及 PUT (又名积垢的c和u)。它通常与 PathVariable 指定哪些项目。
这很难在浏览器中进行测试,并且需要您的客户端知道进行更新的有效格式。名称-值对比json/xml模式更容易记录和理解。
我做什么
最近我一直在做第2项工作,这样我就可以支持单页应用程序的html完全加载或json的仅数据加载。
我通过一个定制的视图解析器来实现,这样就不必为每个请求编写两个方法。
否则,您必须为每个请求创建两个方法(一个带有 application/json 另一个用于html)。

  1. @RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json")
  2. public Object doJson() {}
  3. @RequestMapping(method = RequestMethod.POST)
  4. public Object doHtml() { //after processing redirect. }
展开查看全部
z9gpfhce

z9gpfhce3#

我经常使用(2)和(4)方法。这是因为它的灵活性。(4)当我需要高耦合的数据,并希望验证输入容易,即与 @Valid 添加到控制器的方法参数的注解,我用来绑定发送的数据。

相关问题