当前位置: 首页 > article >正文

【JavaEE进阶】Spring MVC(2)

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗

如有错误,欢迎指出~


传递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");

        //对象转json
        String 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.kler.cn/a/559873.html

相关文章:

  • 从 JS 到 Dart:语法基础
  • DNS实验(ENSP模拟器实现)
  • 什么AGI
  • 软件工程中涉及的多种图表
  • 关于在mac中配置Java系统环境变量
  • 美颜相机1.0
  • Go语言--语法基础1
  • 数据结构与算法设计-作业4-excel表合并与数据整理
  • Go 语言中的协程
  • 【GESP】C++二级真题 luogu-b3865, [GESP202309 二级] 小杨的 X 字矩阵
  • C++算法基础笔记
  • 2025-spring boot 之多数据源管理
  • 未授权理论知识记录
  • 【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十六章课后题答案
  • 爬虫与反爬-Ja3指纹风控(Just a moment...)处理方案及参数说明
  • 39、深度学习-自学之路-自己搭建深度学习框架-3、自动梯度计算改进,并且进行了每一段代码的注释,方便理解程序的运行过程
  • 一篇docker从入门到精通
  • C#快速幂算法
  • 【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
  • 服务器系统都更新到windowsserver2025了