【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;
    }
相关推荐
qq_三哥啊43 分钟前
【IDEA】设置Debug调试时调试器不进入特定类(Spring框架、Mybatis框架)
spring·intellij-idea·mybatis
别惹CC2 小时前
Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot
人工智能·spring boot·spring
寒士obj2 小时前
Spring事物
java·spring
IT毕设实战小研10 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
甄超锋11 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
Java小白程序员14 小时前
Spring Framework:Java 开发的基石与 Spring 生态的起点
java·数据库·spring
甄超锋15 小时前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
还是鼠鼠16 小时前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
还是大剑师兰特17 小时前
Spring面试题及详细答案 125道(1-15) -- 核心概念与基础1
spring·大剑师·spring面试题·spring教程
python_13620 小时前
web请求和响应
java·spring·github