Spring MVC -- 获取参数(普通对象+JSON对象+URL地址参数+文件+Cookie/Session/Header)

目录

1.获取参数

1.1获取单个参数

1.2获取多个参数

传参注意事项:

2.获取对象

3.后端参数重命名@RequestParam

4.获取JSON对象@RequestBody

[5.从 URL 地址中获取参数 @PathVariable](#5.从 URL 地址中获取参数 @PathVariable)

[6.上传文件 @RequestPart](#6.上传文件 @RequestPart)

7.获取Cookie/Session/Header

[7.1 获取 Request 和 Response 对象](#7.1 获取 Request 和 Response 对象)

[7.2 获取Cookie](#7.2 获取Cookie)

[(1)Servlet 获取 Cookie 的方法](#(1)Servlet 获取 Cookie 的方法)

[(2)使用 @CookieValue 注解实现 Cookie 的读取](#(2)使用 @CookieValue 注解实现 Cookie 的读取)

[7.3 获取Header(请求头)中信息](#7.3 获取Header(请求头)中信息)

[(1)Servlet 获取 Header 的方法](#(1)Servlet 获取 Header 的方法)

[(2)使用 @RequestHeader 注解实现 Header 的获取](#(2)使用 @RequestHeader 注解实现 Header 的获取)

[7.4 存储和获取 Session](#7.4 存储和获取 Session)

[(1)Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的](#(1)Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的)

[(2)获取 Session 方法1(Servlet 模式)](#(2)获取 Session 方法1(Servlet 模式))

[(3)获取 Seesion 方法2:@SessionAttribute](#(3)获取 Seesion 方法2:@SessionAttribute)


1.获取参数

1.1获取单个参数

在 Spring MVC 中可以直接用方法中的参数来实现传参:

复制代码
   @GetMapping("/hi") //等于@RequestMapping("/hi")
   //都能实现映射的功能
    public String sayHi(String name) {
        return "Hi:" + name;
    }

1.2获取多个参数

复制代码
  @GetMapping("/hi") //等于@RequestMapping("/hi")
  //都能实现映射的功能
    public String sayHi(String name,Integer v) {
        return "Hi:" + name + "  v:" + v;
    }

传参注意事项:

在 Spring Boot(Spring MVC) 中传参一定要传包装类型,而非基础类型,否则传一个空的值就会出错, 并且这里的参数一定要和前端传递的参数名保持一致,否则就获取不到参数的值了

2.获取对象

并且Spring MVC可以自动实现参数对象的赋值,比如User对象;

复制代码
@Data
public class User {
    private int id;
    private String name;
    private int age;
    //....
}

//普通对象
    @GetMapping("/show-User")
    public String showUser(User user){
        return user.toString();
    }

3.后端参数重命名@RequestParam

有些特殊情况下,前端传递的参数 key 和我们后端接收的 key 可以不一致,比如前端传递了一个 time 给后端,而后端又是用 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使用**@RequestParam** 来重命名前后端的参数值

复制代码
@GetMapping("/show-Time")
    public String showTime(@RequestParam("t") String startTime,
                           @RequestParam(value = "t2") String endTime){

        return "开始时间:" + startTime +" 结束时间:" + endTime ;
    }

注意:

我们观察@RequestParam源码可以看到:

这里代表如果使用@RequestParam的话,前端一定要传递参数,否则就会报错,但是如果我们在代码中加入

就可以不用带参数了

4.获取JSON对象@RequestBody

服务器端实现 JSON 数据的接收需要使用 @RequestBody 注解:

复制代码
    //接收json对象(和第三方系统通讯时常见的场景)
    @PostMapping("/show-jsonUser")//@RequestBody指定的就是接受一个json对象,需要配合PostMapping来使用
    public String showJsonUser(@RequestBody User user){
        return user.toString();
    }

5.从 URL 地址中获取参数 @PathVariable

6.上传文件 @RequestPart

复制代码
@RequestMapping("/upfile")
    public String upfile(@RequestPart("myfile")MultipartFile file) throws IOException {
        String path = "D:\\Desktop\\img.png";
        //保存文件
        file.transferTo(new File(path));
        return path;
    }

文件上传我们使用这样的方法的话就存在一个问题:我们传输文件的地址是固定的,当李四传输了文件,张三再传输的时候,李四传输的文件就被覆盖了

7.获取Cookie/Session/Header

7.1 获取 Request 和 Response 对象

复制代码
@GetMapping("/getparam")
    //HttpServletRequest req 是spring boot/spring MVC 内置的,不用去传,当其项目启动的时候就直接注入了,不用传,本身就有
    //HttpServletRespond 同样也内置了
    public String getParam(HttpServletRequest req){
        return req.getParameter("username");
    }

7.2 获取Cookie

复制代码
 @RequestMapping("/getck")
    public String getCookie(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        for (Cookie item:cookies){
            log.error(item.getName() + ":" + item.getValue());
        }
        return "get Cookie!";
    }
复制代码
 @RequestMapping("/getck2")
    public String getCookie2(@CookieValue("awen") String val){
        return "Cookie value" + val;
    }

这里我是手动在浏览器中加入Cookie信息的

7.3 获取Header(请求头)中信息

(1)Servlet 获取 Header 的方法

复制代码
 @RequestMapping("/getUa")
    public String gerUa(@RequestHeader("user-agent") String userAgent){
        return userAgent;
    }

(2)使用 @RequestHeader 注解实现 Header 的获取

复制代码
    @RequestMapping("getua2")
    public String getHead(@RequestHeader("User-Agent")String userAgent) {
        return "header: " + userAgent;
    }

7.4 存储和获取 Session

获取session:

和servlet时代存session是一样的,没有注解

存session信息:

(1)Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的

复制代码
  @RequestMapping("/setsess")
    //存session
    public String setSession(HttpServletRequest request){
        HttpSession session = request.getSession(true);
        session.setAttribute("userinfo","userinfo");
        return "Set Session Succeed";
    }

(2)获取 Session 方法1(Servlet 模式)

复制代码
  @RequestMapping("/getsess")
    public String getSession(HttpServletRequest request){
        HttpSession session = request.getSession(false);//一定要加false
        if (session !=null && session.getAttribute("userinfo") != null){
            return (String) session.getAttribute("userinfo");
        }else {
            return "暂无 Session 信息";
        }
    }

(3)获取 Seesion 方法2:@SessionAttribute

复制代码
  @RequestMapping("getsess2")
    //false 表示没有这个session也行
    public String getSession2(@SessionAttribute(value = "userinfo",required = false)String userinfo){
        return userinfo;
    }

我们观测到@SessionAttribute的源码中:

意味着必须要有属性,通常情况下需要添加 required = false ,如果不添加,那么当 session 中不存在此属性的时候程序运行就会报错

相关推荐
anlogic8 分钟前
Java基础 8.18
java·开发语言
追逐时光者32 分钟前
.NET 使用 MethodTimer 进行运行耗时统计提升代码的整洁性与可维护性!
后端·.net
练习时长一年1 小时前
AopAutoConfiguration源码阅读
java·spring boot·intellij-idea
你的人类朋友1 小时前
【Node.js】什么是Node.js
javascript·后端·node.js
源码宝2 小时前
【智慧工地源码】智慧工地云平台系统,涵盖安全、质量、环境、人员和设备五大管理模块,实现实时监控、智能预警和数据分析。
java·大数据·spring cloud·数据分析·源码·智慧工地·云平台
David爱编程3 小时前
面试必问!线程生命周期与状态转换详解
java·后端
J_bean3 小时前
Spring AI Alibaba 项目接入兼容 OpenAI API 的大模型
人工智能·spring·大模型·openai·spring ai·ai alibaba
LKAI.3 小时前
传统方式部署(RuoYi-Cloud)微服务
java·linux·前端·后端·微服务·node.js·ruoyi
HeyZoeHey4 小时前
Mybatis执行sql流程(一)
java·sql·mybatis
2301_793086874 小时前
SpringCloud 07 微服务网关
java·spring cloud·微服务