MVC
请求
传递JSON
JSON:JavaScript Object Notation 【JavaScript 对象表⽰法】
JSON是⼀种轻量级的数据交互格式. 它基于 ECMAScript (欧洲计算机协会制定的js规范)的⼀个⼦集,采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。
简单来说:JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.
public class JSONUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws JsonProcessingException {
Person person = new Person();
person.setId(5);
person.setName("zhangsan");
person.setPassword("123456");
//对象转为JSON字符串
String jsonStr = objectMapper.writeValueAsString(person);
System.out.println("JSON字符串为:"+jsonStr);
//JSON字符串转为对象
Person p = objectMapper.readValue(jsonStr,Person.class);
System.out.println("转换的对象id:"+p.getId()+",name:"+p.getName()+",passwo
}
}
使⽤ObjectMapper 对象提供的两个⽅法, 可以完成对象和JSON字符串的互转。
writeValueAsString: 把对象转为JSON字符串。
readValue: 把字符串转为对象。
JSON优点:
- 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
- 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和
传输 - 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输
速度 - 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤。、
- 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼
的安全性。
接收JSON对象,需要使用@RequestBody
注解
@RequestMapping("/m8")
public String M8(@RequestBody Person person){
return "接收的数据person:" + person.toString();
}
获取URL中参数@PathVariable
@RequestMapping("/m9/{userId}")
public String m9(@PathVariable Integer userId){
return "userId: " + userId;
}
格式要满足:
传递多个参数:
@RequestMapping("/m9/{userId}/{name}")
public String m9(@PathVariable Integer userId,@PathVariable String name){
return "userId: " + userId + "name: " + name;
}
上传文件@RequestPart
@RequestMapping("/m10")
public String m10(@RequestPart MultipartFile file){
System.out.println(file.getOriginalFilename());
return "success";
}
上传图片:
获取Cookie/Session
Http是无状态的,http没有记忆功能,现在请求和过一会请求,同样的请求参数,得到的结果是一样的。
Cookie 客户端机制
Session 服务端机制
Session
会话
Cookie 和 Session的区别
- Cookie 是客⼾端保存⽤⼾信息的⼀种机制. Session 是服务器端保存⽤⼾信息的⼀种机制.
- Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的
桥梁 - Cookie 和 Session 经常会在⼀起配合使⽤. 但是不是必须配合.
完全可以⽤ Cookie 来保存⼀些数据在客⼾端. 这些数据不⼀定是⽤⼾⾝份信息, 也不⼀定是SessionId。
Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, ⽐如通过URL传递.。
之前获取cookie:
@RequestMapping("/getCookie")
public String getCookie(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
if(cookies != null){
Arrays.stream(cookies).forEach(cookie -> {
System.out.println(cookie.getName()+ ":" + cookie.getValue());
});
}
return "获取cookie成功";
}
使用注解获取cookie:
@RequestMapping("/getCookie2")
public String getCookie2(@CookieValue String bite){
return "cookie存取的值bite:" + bite;
}
使用注解只能一个一个cookie去拿。
获取Session
理解session:
之前获取session的方式:
@RequestMapping("/getSession")
public String getSession(HttpServletRequest request){
HttpSession session = request.getSession(false);
if (session != null){
String username = (String) session.getAttribute("username");
return "登录用户" + username;
}
return "session 为空";
}
添加session:
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request){
HttpSession session = request.getSession();
session.setAttribute("username","zhangsamn");
return "success";
}
观察cookie的变化:
此时再去getSession:
注解方式获取session:
@RequestMapping("/getSession2")
public String getSession2(@SessionAttribute String username){
return "username:" + username;
}
这是一个Spring框架中的网络请求日志。在2024年3月31日的晚上7点25分16秒,一个名为“nio-8080-exec-2”的线程或会话遇到了一个关于缺少会话属性的警告。具体来说,请求中缺少了一个名为“username”的字符串类型属性,导致了RequestBindingException异常。
修改代码:
@RequestMapping("/getSession2")
public String getSession2(@SessionAttribute(required = false) String username){
return "username:" + username;
}
此时我们去设置session:
成功了之后,我们再获取session:
还有第三种方式来获取session:
@RequestMapping("getSession3")
public String getSession3(HttpSession session){
String username = (String) session.getAttribute("username");
return "登录用户:" + username;
}
获取Header
之前的方式:
@RequestMapping("/getHeader")
public String getHeader(HttpServletRequest request){
String userAgent = request.getHeader("User-Agent");
return "userAgent: "+ userAgent;
}
此时就拿到了浏览器的信息。
注解方式:
@RequestMapping("/getHeader2")
public String getHeader2(@RequestHeader("User-Agent")String userAgent){
return "userAgent: "+ userAgent;
}