- post请求和get请求存放参数位置
-
post请求和get请求存放参数位置是不同的:
-
post方式参数存放在请求数据包的消息体中。
-
get方式参数存放在请求数据包的请求行的URI字段中,以?开始以param=value¶m2=value2的形式附加在URI字段之后。
-
而request.setCharacterEncoding(charset);只对消息体中的数据起作用,对于URI字段中的参数不起作用。
get用new String(target.trim().getBytes("ISO-8859-1"), charset);
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
get请求的参数
$.ajax({ url : SITE_PATH + "/userLogRecord/getList3?name1=name&name2=name2", type : 'GET', dataType : 'json', data:{name3:"name3"}, success : function(data) { console.log(111111); }, error : function(msg) { } });
1、没有search也没有data,即标准的无参数get请求,这种既然没有参数,当然也就不涉及content-Type(请求参数data的数据类型)。
因此url+type就是必须得了,dataType视返回结果而定,常见的无非是两种,一种不用写,一种如上所示为json。
2、
有search没有data
没有search有data
有search也有data
这三种都是一样的,都会拼接在url后面以search的形式进行请求
$.ajax({ url : SITE_PATH + "/userLogRecord/getList3", type : 'GET', dataType : 'json', success : function(data) { console.log(1); }, error : function(msg) { console.log(0); } }); $.ajax({ url : SITE_PATH + "/userLogRecord/getList4?name1=name1&name2=name2&name3=name3", type : 'GET', dataType : 'json', success : function(data) { console.log(1); }, error : function(msg) { console.log(0); } }); $.ajax({ url : SITE_PATH + "/userLogRecord/getList5", type : 'GET', dataType : 'json', data:{name1:"name1",name2:"name2",name3:"name3"}, success : function(data) { console.log(1); }, error : function(msg) { console.log(0); } }); $.ajax({ url : SITE_PATH + "/userLogRecord/getList6?name1=name1", type : 'GET', dataType : 'json', data:{name2:"name2",name3:"name3"}, success : function(data) { console.log(1); }, error : function(msg) { console.log(0); } });
因此对于GET请求
1、放在URL后面和data里面都是一样的
2、放在data里面的数据不能转成JSON对象,应该使用JSON字符串
data:JSON.stringify({name3:"name3"}),
3、content-Type可以不设置,或者设置成默认值application/x-www-form-urlencoded,此时绝对不能使用contentType : 'application/json;charset=UTF-8',
@RequestMapping(value = "/getList3", method = RequestMethod.GET) @ResponseBody public Map<String, Object> getList3() { Map<String, Object> result = new HashMap<>(); result.put("status", "getList3"); return result; } @RequestMapping(value = "/getList4", method = RequestMethod.GET) @ResponseBody public Map<String, Object> getList4(String name1, String name2,String name3 ) { Map<String, Object> result = new HashMap<>(); result.put("status", "getList4"); result.put("name1", name1); result.put("name2", name2); result.put("name3", name3); return result; } @RequestMapping(value = "/getList5", method = RequestMethod.GET) @ResponseBody public Map<String, Object> getList5(String name1, String name2,String name3 ) { Map<String, Object> result = new HashMap<>(); result.put("status", "getList5"); result.put("name1", name1); result.put("name2", name2); result.put("name3", name3); return result; } @RequestMapping(value = "/getList6", method = RequestMethod.GET) @ResponseBody public Map<String, Object> getList6(String name1, String name2,String name3 ) { Map<String, Object> result = new HashMap<>(); result.put("status", "getList6"); result.put("name1", name1); result.put("name2", name2); result.put("name3", name3); return result; }
@ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POST请求的参数
对于放在URL后面的search,这个跟GET一样
但是对于data,有两种
一种是使用json字符串,不能使用JSON.stringify(({name3:"name3"}),contentType为默认值application/x-www-form-urlencoded
一种是使用json对象,必须使用JSON.stringify(({name3:"name3"}),contentType : 'application/json;charset=UTF-8',
$.ajax({ url : SITE_PATH + "/userLogRecord/getList?name1=name1", type : 'POST', async : false, contentType : 'application/json;charset=UTF-8', dataType : 'json', data : JSON.stringify(parameter), success : function(data) { console.log(111111); }, error : function(msg) { } }); $.ajax({ url : SITE_PATH + "/userLogRecord/getList1", type : 'POST', dataType : 'json', data : {name1:"aa",name2:"aasfa"}, success : function(data) { console.log(111111); }, error : function(msg) { } }); $.ajax({ url : SITE_PATH + "/userLogRecord/getList2?name1=name&name2=name2", type : 'POST', dataType : 'json', success : function(data) { console.log(111111); }, error : function(msg) { } }); $.ajax({ url : SITE_PATH + "/userLogRecord/getList21?name1=name&name2=name2", type : 'POST', dataType : 'json', data:{name3:"name3"}, success : function(data) { console.log(111111); }, error : function(msg) { } });
@RequestMapping(value = "/getList") @ResponseBody public Map<String, Object> getList(@RequestBody Map<String, Object> data , String name1) { Map<String, Object> result = new HashMap<>(); result.put("status", "success1"); return result; } @RequestMapping(value = "/getList1") @ResponseBody public Map<String, Object> getList1(String name1, String name2) { Map<String, Object> result = new HashMap<>(); result.put("status", "success1-name1"); result.put("name1", name1); result.put("name2", name2); return result; } @RequestMapping(value = "/getList2") @ResponseBody public Map<String, Object> getList2(String name1, String name2) { Map<String, Object> result = new HashMap<>(); result.put("status", "success1-name1"); result.put("name1", name1); result.put("name2", name2); return result; } @RequestMapping(value = "/getList21") @ResponseBody public Map<String, Object> getList21(String name1, String name2,String name3) { Map<String, Object> result = new HashMap<>(); result.put("status", "success1-name1"); result.put("name1", name1); result.put("name2", name2); result.put("name3", name3); return result; }
1、传递json字符串的时候,POST请求的data并没有合到URL里面一起请求,但是在后台接收参数的时候,search和data都是通过同名参数直接接收的。
2、传递JSON对象的时候,需要用@RequestBody Map<String, Object> data,后台才能够接收到参数。