服务端和客户端通过http协议进行通信
服务端可以接受客户端发来的http请求,并获取的请求行中的URL,Headers中的session,cookie,其他数据和Body中的数据
一.服务端从url获取数据
1.接收无参URL
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d1")
public String noParameter() {
return "无传递参数";
}
}
2.接收含参URL
2.1 url包含单个参数
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d2")
public String parameter(String p1) {
return "收到参数p1:"+p1;
}
}
2.2 url包含多个参数
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d3")
public String parameters(String name, String age, String sex) {
return "name:"+name + ",age:" + age + ",sex:"+sex;
}
}
如果url传递了多个参数,服务端可以创建相应的对象来接收这些参数
public class PersonInfo {
private String name;
private int age;
private String sex;
public PersonInfo(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "PersonInfo{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d3")
public String parameters(PersonInfo personInfo) {
return personInfo.toString();
}
}
2.3.接收URL中的数组与集合
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d4")
public String array(int[] arr) {
return Arrays.toString(arr);
}
}
服务端也可以用列表来接收url中的数组,不过要使用@RequestParam
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d4")
public String array(@RequestParam("arr")List<String> list) {
return list.toString();
}
}
3. 接收URL路径中的参数
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d5/{id}/{name}")
public String getPathVariable(@PathVariable Integer id, @PathVariable String name) {
return "id" +id+",name"+name;
}
}
4.服务端的参数重命名
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d5")
public String parameters(@RequestParam("who") String name, int age, String sex) {
return "name:" + name + ",age:" + age + ",sex:" + sex;
}
}
相当于把用who来接受张三这个值,然后把who的值再赋值给name
当然也不只有@RequestParam这个注解可以进行重命名
二.服务端Body中获取数据
1 接收Body中文件
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d6")
public String getFile(@RequestPart("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
file.transferTo(new File("E:/myFile/"+fileName));
return "接收到的文件名臣为" + fileName;
}
}
上传文件
查看文件
2.接收正文中的Body数据
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d6")
public String json(@RequestBody PersonInfo personInfo) {
return personInfo.toString();
}
}
三.服务端从Headers获取数据
1 获取Headers中的Session与Cookie
1.1 获取Cookie
1.1.1通过HttpServletRequest获取
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d7")
public String getCookie(HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
StringBuffer sb = new StringBuffer();
if(cookies != null) {
for(Cookie ck : cookies){
sb.append(ck.getName()+":"+ ck.getValue());
}
}
return "Cookie信息"+sb;
}
}
设置Cookie
结果
1.1.2 通过注释获取
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d8")
public String getCookie(@CookieValue("lx") String cookie) {
return cookie;
}
}
1.2 Session的存储和读取
Session存储在服务端内,Cookie中存储着SessionId,通过Cookie中的SessionId可以找到当前服务端与客户端之间的会话
HttpSession getSession(boolean create),create默认为True,表示当会话不存在的时候创建会话,若为False,则返回null
创建会话时,服务端通过Set-Cookie将SessionId存在Cookie中
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d9")
public String setSession(HttpServletRequest request){
HttpSession session = request.getSession();
if(session != null) {
session.setAttribute("lx","102202131");
}
return "session存储成功";
}
@RequestMapping("d10")
public String getSession(HttpServletRequest request) {
HttpSession session = request.getSession(false);
String id = null;
if(session != null && session.getAttribute("lx") != null) {
id = (String) session.getAttribute("lx");
}
return "id:" + id;
}
}
1.3 其他方式获取Session
1.3.1 通过注释获取Session
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d11")
public String getSession(@SessionAttribute(value = "lx",required = false) String id ) {
return "id:" + id;
}
}
1.3.2 通过HttpSession获取Session
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d12")
public String getSession(HttpSession session) {
String id = (String) session.getAttribute("lx");
return "id:" + id;
}
}
2 获取Headers中的其他数据
@RestController
@RequestMapping("/test")
public class demo1 {
@RequestMapping("/d13")
public String getHeaders(HttpServletRequest request) {
String userAgent = request.getHeader("user-agent");
return userAgent;
}
}
当然这里也可以获取cookie中的内容