【Spring Web MVC】(MVC请求 传递JSON 获取URL中参数@PathVariable上传文件@RequestPart获取Cookie/Session获取Session Header)

本文详细介绍了在SpringMVC中如何使用JSON进行数据传递,包括对象与JSON字符串的转换,以及如何通过`@RequestBody`、`@PathVariable`、`@RequestPart`处理不同类型的请求参数,同时讨论了Cookie、Session和Header的获取与管理。
摘要由CSDN通过智能技术生成


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优点:

  1. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
  2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和
    传输
  3. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输
    速度
  4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤。、
  5. 安全性: 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的区别

  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();
        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;
    }

在这里插入图片描述

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马尔科686

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值