kam*_*mil 7 java jquery spring spring-mvc
我目前正在学习使用Spring MVC.在开发过程中,我使用Ajax和jQuery四种不同的表单处理方式.现在,我想知道每种方法的优点和缺点是什么.还有其他人吗?
假设我们有一个非常简单的形式,只有2个输入
<input id="name" type="text" value"Name">
<input id="active" type="checkbox">
<input type="button" onclick="submitForm()">
Run Code Online (Sandbox Code Playgroud)
假设我们没有验证客户端和服务器站点上的数据.我们还将omitt处理返回的数据.我只对将数据发送到服务器感兴趣.现在我们如何处理提交?我的解决方案是:
1.基于PathVariable的请求
JS发送请求看起来像这样:
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
jQuery.ajax("/Submit/Name/" + name + "/Active/"+ active + "/",
{
type:"POST"
});
}
Run Code Online (Sandbox Code Playgroud)
还有控制器:
@RequestMapping(value="/Submit/Name/{name}/Active/{active}/",method=RequestMethod.POST)
publis void submitForm(@PathVariable String name, @PathVariable Boolean active)
{ //something not important here }
Run Code Online (Sandbox Code Playgroud)
在我看来,优点
缺点
/
在发送到服务器的数据中用作char的问题2.请求数据
我不知道如何命名它,但这是JS文件中的想法:
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
var object = {name:name,active:active};
jQuery.ajax("/Submit/",
{
type:"POST",
data: object
});
}
Run Code Online (Sandbox Code Playgroud)
和控制器:
@RequestMapping(value="/Submit/",method=RequestMethod.POST)
publis void submitForm(@RequestParam(value="name") String name, @RequestParam(value="active") Boolean active)
{ //something not important here }
Run Code Online (Sandbox Code Playgroud)
在我看来,与第一种方法没有太大区别,但是:
优点
缺点
3.将JSON作为PathVariable发送到服务器
在JS文件中:
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
var object = {name:name,active:active};
jQuery.ajax("/Submit/" + JSON.stringify(object),
{
type:"POST"
});
}
Run Code Online (Sandbox Code Playgroud)
和控制器
@RequestMapping(value="/Submit/{json}",method=RequestMethod.POST)
publis void submitForm(@RequestParam(value="name") String name, @RequestParam(value="active") Boolean active)
{
//now we are actually doing sth important here, cause we need to parse JSON
}
Run Code Online (Sandbox Code Playgroud)
优点
缺点
4.JSON作为RequestBody与类映射
我最喜欢的方法,但并不总是可行,因为我们需要编写多个类来包装发送数据,JS:
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
var object = {name:name,active:active};
jQuery.ajax("/Submit/",
{
type:"POST",
data:JSON.stringify(object)
});
Run Code Online (Sandbox Code Playgroud)
和Java代码:
public class Wrapper {
private String name;
private Boolean active;
//getters and setters
}
@RequestMapping(value="/Submit/",method=RequestMethod.POST)
publis void submitForm(@RequestBody Wrapper wrapper)
{
//all data available with Wrapper class
}
Run Code Online (Sandbox Code Playgroud)
优点
缺点
那就是我目前所知道的.我会感激和批评,建议更好的解决方案或任何东西.谢谢!
(1)基于PathVariable的请求
正如您所说,您会遇到特殊字符(例如/
)的问题。基于路径的 URL 如果保持简短,则可读性最佳。例如,/hotel/{h}/room/{r}
。有时,使用path
和参数的组合来表示vs参数。request
mandatory
optional
(2) 请求数据
这将是一个很好的方法,让您可以灵活地轻松添加/删除Request Parameters
以及管理不同的参数组合。
(3) 将 JSON 作为 PathVariable 发送到服务器
我发现这种方法存在与 相同的技术问题(1)
。如果没有适当的转义(并且 Spring 在撰写本文时无法/
以任何形式处理),则此选项不可行。(4)
就是这样做的方法。
(4) JSON 作为带有映射类的 RequestBody
这对于复杂的对象来说是更可取的。通常spring可以帮助你直接将json映射到Java对象。缺点是无法通过浏览器轻松测试它。我相信这是 RESTful 服务中的常见模式,尽管它不一定规定传输技术。
总之,
使用查询参数很简单,并且使用户能够直接从浏览器地址栏测试服务。
在请求正文中使用对象对于获得处理复杂数据的灵活性很有用,但不能轻松地从浏览器进行测试。
/
除非提交没有特殊字符的格式正确的数据,否则路径变量选项与 spring 不兼容。
归档时间: |
|
查看次数: |
9291 次 |
最近记录: |