对于后台开发人员来说,最烦心的事莫过于和前端打交道;同样的对于一个前端开发人员来说,也莫过于和后台开发打交道。
废话不多说,今天我就是来解决这个问题,让后台和前端能够愉快的相处。文章不足之处,请多指正。
前后端交互,主要的工作无外乎是传递参数和返回参数
首先说前端传递参数:
一般参数都是以json格式传到后台,首先对json做下简单的介绍:
JSON有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构
示例:
{
"animals": {
"dog": [
{
"name": "Rufus",
"age":15
},
{
"name": "Marty",
"age": null
}
]
}
}
JSON 语法是 JavaScript 对象表示语法的子集。
JSON 值可以是:
var sites = [ { "name":"runoob" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ];
可以像这样访问 JavaScript 对象数组中的第一项(索引从 0 开始):
sites[0].name;结果为runoob
JSON 通常用于与服务端交换数据。
在接收服务器数据时一般是字符串。
我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。
例如我们从服务器接收了以下数据:
{ "name":"李白", "age":20, "add":"四川" }
我们使用 JSON.parse() 方法处理以上数据,将其转换为 JavaScript 对象:
var obj = JSON.parse('{ "name":"李白", "age":20, "add":"四川" }');
obj.name 取值即为“李白”
JSON 通常用于与服务端交换数据。
在向服务器发送数据时一般是字符串。
我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。
例如我们向服务器发送以下数据:
var obj = { "name":"李白", "age":20, "add":"四川" }
我们使用 JSON.stringify() 方法处理以上数据,将其转换为字符串:
var myJSON = JSON.stringify(obj);
myJSON 为字符串。
我们可以将 myJSON 发送到服务器
@requestBody接受参数。
content-type为application/json或者是application/xml等,不是默认的application/x-www-form-urlcoded编码的内容。
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
例如1:ajax请求
Controller接收:
2.HttpServletRequest 接受参数。
content-type为application/x-www-form-urlcoded编码的内容。
Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest.
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
主要功能:参数解析,Cookie读取,http请求字段,文件上传
@RequestMapping(value = "/getDate")
@ResponseBody
public String getDate(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
String string = httpServletRequest.getParameter("name");
return "html";
}
2.1也可以直接用属性接受
@RequestMapping(value = "/getDate")
@ResponseBody
public String getDate(String name) {
String string = httpServletRequest.getParameter("name");
return "html";
}
2.2也可以用@RequestParam接受
@RequestMapping(value = "/getDate")
@ResponseBody
public String getDate(@RequestParam(value="name") String userName) {
System.out.print(userName);
return "html";
}
当前台界面使用GET或POST方式提交数据时,数据编码格式由请求头的ContentType指定。分为以下几种情况:
1. application/x-www-form-urlencoded,这种情况的数据@RequestParam、@ModelAttribute、HttpServletRequest 可以处理,@RequestBody也可以处理。
2. multipart/form-data,@RequestBody不能处理这种格式的数据。(form表单里面有文件上传时,必须要指定enctype属性值为multipart/form-data,意思是以二进制流的形式传输文件。)
3. application/json、application/xml等格式的数据,必须使用@RequestBody来处理。
3、@PathVariable就收url中的参数
@RestController
public class HelloController {
@RequestMapping(value="/hello/{id}",method= RequestMethod.GET)
public String sayHello(@PathVariable("id") Integer id){
return "id:"+id;
}
未完待续~~~~~~~~~~