SpringMVC开发Restful API 参数收集方式
目录
1、Restful API 简单说明
一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答。
Rest:表述性状态转移
Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词,用HTTP协议里的动词来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转:
GET 用来获取资源,
POST 用来新建资源(也可以用于更新资源),
PUT 用来更新资源,
DELETE 用来删除资源。
2、收集参数问题
在设计Restful API时,很多时候需要以不同的方式收集参数,比如登陆、更新账户等操作,下面着重讨论在不同的请求方式下,参数收集的问题,原则上前后端使用json作为数据交换格式。(用到:SpringMVC、JQuery,AJAX,JSP)
测试按钮书写形式:
<input id="button3" value="testJson" type="button"/>
2.1RequestMethod.GET
get方式请求中,默认的参数提交方式是在url上体现,get请求是获取服务器端的数据,不建议提交复杂数据类型,如果涉及到多个数据或者复杂数据类型,需要换成post方式,下面是get请求的例子:
http://localhost:8080/api/user?userName=kent&userId=1
后台书写方式:
@RequestMapping(value = "/login",method = RequestMethod.GET)
public JsonResult login(@RequestParam("mydata") String data){
System.out.println(data);
return new SuccessResult().setData(data);
}
其中JsonResult以及SuccessResult是自定义的数据结构,以方便前后台使用Json进行交互,@RequestParam
是为了接收请求参数所用的标注,value用于当变量名与请求参数名不一致时,指定请求参数名。
请求URL示例:http://localhost:9999/login?mydata=hello
前台书写方式:
$("#button3").click(function () {
var mydata = "mydata=hello";
var url = "/login";
$.ajax({
url : url,
type : 'GET',
data : mydata
});
});
其中请求数据以字符串的形式拼接而成,这时后台收集到的参数为 hello
2.2RequestMethod.POST
在此类请求中,参数可以封装到实体类中,后台接收数据时,框架会自动将数据解析并映射到JavaBean上,post请求方式是将前端客户录入的数据提交到后台进行处理,数据安全。
后台书写方式
@RequestMapping(value = "/login",method = RequestMethod.POST)
public JsonResult login(@RequestBody Address address){
System.out.println(address);
return new SuccessResult();
}
前台书写方式:
$("#button3").click(function () {
var url = "/login";
var address = {};
address['id'] = 1;
address['province'] = "maopp";
address['city'] = "hihihi";
$.ajax({
url : url,
type : 'POST',
contentType: "application/json;charset=utf-8",
data : JSON.stringify(address)
});
});
前台规范化参数时有两点需要注意,一个是content-type
,默认的内容类型application/x-www-form-urlencoded
,如果想提交数据到服务器端,需要指定内容类型为application/json
,否则服务器端接收到的为null;第二点是将数据格式化为Json格式,使用JSON.strinify()
函数。
2.3RequestMethod.PUT
用于更新资源,参数提交方式与post类似
后台书写方式:
@RequestMapping(value = "/login",method = RequestMethod.PUT)
public JsonResult login(@RequestBody Address address){
System.out.println(address);
return new SuccessResult();
}
前端书写方式:
$("#button3").click(function () {
var url = "/login";
var address = {};
address['id'] = 1;
address['province'] = "maopp";
address['city'] = "hihihi";
$.ajax({
url : url,
type : 'PUT',
contentType: "application/json;charset=utf-8",
data : JSON.stringify(address)
});
});
2.4RequestMethod.DELETE
用于删除资源或者注销账号等操作,可以通过在url上提交参数,也可以提交Json形式的参数,多数情况下只要传入一个Integer类型的数据即可(比如删除用户只需要提交用户id)
后台书写形式:
@RequestMapping(value = "/deleteUser/{id}",method = RequestMethod.DELETE
)
public JsonResult logout(@PathVariable Integer id){
//注销session
userService.deleteById(id);
}
使用@PathVariable
注解,支持从请求的url上拿到数据,需要注意的是url上面的参数名需要和方法中的变量名保持一致。
上一篇: Linux环境下的C++编译