【JavaEE进阶】Spring MVC(2)

embedded/2025/2/23 23:52:36/

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗

如有错误,欢迎指出~


传递JSON数据

JSON(JavaScript Object Notation)是一种轻量级的数据格式,有自己的语法和格式,主要负责不同语言中的数据传递和交换(作用类似于"英语,普通话"等语言,用于交流)

json与对象互相转换

JSON本质上是⼀个字符串,通过⽂本来存储和描述数据 

SpringMVC框架也集成了JSON的转换⼯具,可以直接使⽤,来完成JSON字符串和Java对象的互转 本质上是jackson-databind提供的功能,SpringMVC框架中已经把该⼯具包引⼊了进来,咱们直接使⽤即可,但是如果脱离SpringMVC使⽤,需要引⼊相关依赖

    public static void main(String[] args) throws JsonProcessingException {ObjectMapper objectMapper=new ObjectMapper();User user=new User();user.setName("lisi");user.setAge(18);user.setGender("1");//对象转jsonString s= objectMapper.writeValueAsString(user);System.out.println(s);//json转字符串User user1=objectMapper.readValue(s,User.class);System.out.println(user1);}

使⽤ObjectMapper对象提供的两个⽅法,可以完成对象和JSON字符串的互转

  • writeValueAsString:把对象转为JSON字符串 
  • readValue:把字符串转为对象 

传递JSON

RequestBody:请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正 ⽂中

    //传递json@RequestMapping("/p7")//public String p7(@RequestBody User user){return "User:"+user;}

利用fiddler抓包,下面展示的是传递对象和传递json字符串的区别 

利用postman发送也有区别

获取url中的数据 

@PathVariable表示从url中拿去articleId字符串,有{}扩起要获取的数据

    //获取url中的参数@RequestMapping("/article/{articleId}")//public String p8(@PathVariable String articleId){return "articleId:"+articleId;}

获取url中多个参数

加了@PathVariable注解,要注意以下两点

  1. 如果路径中与方法中名字不一致,要在注解中声明(比如下面代码中,路径中articleId和方法中的id不一致,要声明)
  2. 默认是必传参数,也可以将默认值改为false
    //@RequestMapping("/article/{articleId}/{name}")//@PathVariable表示从url中拿去articleId字符串public String p9(@PathVariable("articleId") String id,@PathVariable String name){return "articleId:"+id+",name:"+name;

传输文件@RequestPart 

获取文件名

    @RequestMapping("/p8")public String getfile(@RequestPart("file") MultipartFile file) throws IOException {//获取⽂件名称 String fileName = file.getOriginalFilename();//⽂件上传到指定路径 file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));return "接收到⽂件名称为: "+fileName;}

 获取cookie/session

HTTP协议是"无状态"的(默认情况下,每一次通信都是独立没有联系的)

令牌类似于"就诊卡",由服务器生成给用户的,通常存储在Cookie字段中

Session是服务器方存储用户信息,Cookie是给客户端存储信息

session

Session是服务器为了保存⽤⼾信息⽽创建的⼀个特殊的对象.用于区分不同的会话

Session的本质就是⼀个"哈希表",存储了⼀些键值对结构.Key就是SessionID,Value就是⽤⼾信息(⽤⼾信息可以根据需求灵活设计).

Cookie和Session通过sessionId一一对应

Cookie和Session的区别

  1. Cookie是客⼾端保存⽤⼾信息的⼀种机制.Session是服务器端保存⽤⼾信息的⼀种机制.
  2. Cookie和Session之间主要是通过SessionId关联起来的,SessionId是Cookie和Session之间的桥梁
  3. Cookie和Session经常会在⼀起配合使⽤.但是不是必须配合.
    • 完全可以⽤Cookie来保存⼀些数据在客⼾端.这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是 SessionId
    • Session中的sessionId也不需要⾮得通过Cookie/Set-Cookie传递,⽐如通过URL传递 

 获取Cookie

    //@RequestMapping("/getCookie")public String getCookie(HttpServletRequest request){Cookie[] cookies= request.getCookies();//TODO cookie可能为空,需要做一下空指针处理if(cookies==null){return null;}for(Cookie cookie:cookies){System.out.println(cookie.getName()+":"+cookie.getValue());}return "获取cookie成功";}

在浏览器中设置cookie 

服务器中返回cookie内容 

方法二:通过注解的方式获取cookie

    //@RequestMapping("/getCookie2")public String getCookie2(@CookieValue("qiuzhao") String qiuzhao){return "从Cookie中获取信息,qiuzhao:"+qiuzhao;}

利用postman设置cookie

 构造session

    @RequestMapping("/setSession")public String setSession(HttpServletRequest request){//获取session对象HttpSession session= request.getSession();//如果有session就直接拿到session对象,如果没有就创建一个session.setAttribute("userName","zhangsan");session.setAttribute("age",15);return "设置session成功!";}

获取session

从Cookie中获取SessionID,根据SessionID获得Session对象

     @RequestMapping("/getSession")public String getSession(HttpServletRequest request){HttpSession session = request.getSession();//默认参数为true,如果如果有session就直接拿到session对象,如果没有就创建一个// 如果参数设为false,则要考虑有没有session对象//session 是类似于map的结构//判断空指针if(session==null){return null;}String userName=(String)session.getAttribute("userName");System.out.println(session.getAttribute("age"));return "从session中获取信息,userName:"+userName;}

方法二

    //获取session方法2@RequestMapping("/getSession2")public String getSession(HttpSession session){String userName=(String)session.getAttribute("userName");System.out.println(session.getAttribute("age"));return "从session中获取信息,userName:"+userName;}

session存储在服务器的内存上,服务重启时,session会丢失 

 方法三

通过注解@SessionAttribute获取,前提是必须要有一个session, 并且这里的userName必须也要有

    //获取session方法3@RequestMapping("/getSession3")public String getSession3(@SessionAttribute("userName") String userName){return "从session3中获取信息,userName:"+userName;//}

获取header

    //获取header@RequestMapping("/getHeader")public String getHeader(HttpServletRequest request){String userAgent =request.getHeader("User-Agent");return "userAgent:"+userAgent;}

方法二

利用@RequestHeader注解获取header中的User-Agent,并将获取的User-Agent的值赋值给userAgent

    //用注解的方式获取header@RequestMapping("/getHeader2")public String getHeader2(@RequestHeader("User-Agent") String userAgent){//return "userAgent:"+userAgent;}


http://www.ppmy.cn/embedded/164706.html

相关文章

工业级无人机手持地面站技术详解

工业级无人机手持地面站是无人机系统的核心组成部分,它集控制、通信、数据处理于一体,为无人机的安全飞行和任务执行提供全面支持。以下是对工业级无人机手持地面站技术的详细解析: 一、硬件构成 1. 处理器与操作系统: 工业级手…

JVM系列--虚拟机类加载机制

概况 在 Class 文件中描述的各种信息,最终都需要加载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些 Class文件? Class 文件中的信息进入到虚拟机后会发生什么变化?这些都是本文要讲的内容。 虚拟机把描述类的数据从 Class 文件加载到内存,并…

Qt ModbusTCP和ModBusRTU读写数据

文章目录 ModbusTCP和ModBusRTU 的区别ModbusTCP添加模块ModBus读写 ModBusRTU添加模块 ModbusTCP和ModBusRTU 的区别 Modbus RTU 和 Modbus TCP 是 Modbus 协议的两种不同实现方式,主要区别如下: 通信介质 Modbus RTU:基于串行通信&#xf…

Linux基本指令(三)+ 权限

文章目录 基本指令grep打包和压缩zip/unzipLinux和windows压缩包互传tar(重要)Linux和Linux压缩包互传 bcuname -r常用的热键关机外壳程序 知识点打包和压缩 Linux中的权限用户权限 基本指令 grep 1. grep可以过滤文本行 done用于标记循环的结束&#x…

MySQL 一条 SQL 执行流程解析

MySQL 的 SQL 执行过程其实是一个非常复杂的多阶段流程。每当我们在客户端发出一条 SQL 语句时,MySQL 会经过多个步骤来处理并执行它。在这里,我们将详细地介绍 MySQL 执行 SQL 语句的完整流程,从 SQL 语句的解析到结果的返回。 1. 客户端请…

初级渗透测试工程师需要学什么?网络安全零基础入门到精通教程建议收藏!

1、前言 本文主要介绍如何成为一名初级的渗透测试工程师所需要学习的内容,后续也会基于此将自己的学习总结、心得记录下来。相信在不断坚持下,争取在今年五月初成为一名初级的渗透测试工程师。 2、涉及知识领域 基础网络知识: 理解TCP/IP协…

深入解析:在Spring Boot中集成MyBatis Plus实现高效数据库操作

前后端微服务商城项目,手把手教学! 在Spring Boot中集成第三方框架,实际上是非常常见的一种做法。Spring Boot自带了很多开箱即用的功能,但在实际项目开发中,我们经常需要借助一些第三方框架来实现更为复杂的功能。比如…

PHP约课健身管理系统小程序源码

🏋️‍♂️ 约课健身管理系统小程序:重塑健身预约体验,引领数字化健身新时代 一款基于ThinkPHPUniapp框架,由米扬精心雕琢的约课健身管理系统小程序,专为健身房、健身工作室、运动会所、运动场馆、瑜伽馆、拳馆等泛健…