【SpringBoot】-Spring MVC项目如何传递参数?

本文详细介绍了在SpringBoot的SpringMVC框架中如何传递不同类型的参数,如单个参数、对象、表单数据、Json对象以及文件上传。同时涵盖了后端对Cookie、Header和Session的设置和获取方法。
摘要由CSDN通过智能技术生成

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏【Framework】
主要内容:使用SpringBoot的SpringMVC框架传递各种参数,如传对象,传表单,传文件。后端对前端的请求信息的获取,如Cookie,Header。后端对session进行设置和获取。

一、传递不同参数类型

注意:
1> 参数传递不使用基础数据类型,因为容易出错(包装类型最多是参数为null)
2> 在后端路由的方法中仍然可以使用Servlet阶段学的 HttpServletRequest和HttpServletResponse作为参数(这两个相当于隐藏的参数),但是没必要。
3> 当有多个参数时,前后端进行参数匹配,是以参数的名称进行匹配的,与参数的前后位置无关。
4> Spring MVC可以实现自动的参数映射,因此传关于对象的信息时,在后端就可以转成一个对象使用。

1、传递单个参数

前端发送http请求
在这里插入图片描述

后端接收参数

	//1.传递单个参数
    @RequestMapping("/m1")
    public Object method_1(String name){
        System.out.println("==============================");
        System.out.println("参数name:" + name);
        System.out.println("==============================");
        return "传递单个参数";
    }

后端处理结果
在这里插入图片描述

2、传递对象

理解:前端发送对象信息,后端将信息获取并封装在对象中。

前端发送http请求
在这里插入图片描述
后端接收信息并将信息转为对象

	@RequestMapping("/m2")
    public String method_2(Person p){
        System.out.println("==================================");
        System.out.println("p对象username:" + p.getUsername());
        System.out.println("p对象password:" + p.getPassword());
        System.out.println("==================================");
        return "传递对象";
    }

后端处理后打印的信息
在这里插入图片描述

3、传递表单数据

后端有两种处理方式:1>一个一个获取前端传的参数(类似1) 2>把前端传来的参数封装成一个对象(类似2)。

4、传递Json对象 后端用@RequestBody注解

理解:后端使用@RequestBody注解,表示从请求的请求体获取信息,请求体是个Json格式数据,因此后端可以正常获取前端的数据并封装在对象中

前端发送http请求:
在这里插入图片描述
后端使用**@RequestBody注解:**
在这里插入图片描述
后端处理后成功打印信息:
在这里插入图片描述

5、参数部分传参@RequestParam和 基础URL传参@RequestVariable

理解:
参数部分传参指的是:http://localhost:8080/test/m4?username=‘张三’
基础URL传参指的是:http://localhost:8080/test/m4/zhangsan。前者传参的username在后面的参数部分,而后者传参的username在基础path中。
区别:
前者适用于要传参数较多的情况;
后者适用于参数较少,且对搜索有关键词要求的情况(基础URL传参对搜索引擎搜索的权重更大,因为要传的参数在path里)。
注意: @RequestParam和@PathVariable都可以重命名参数,也可以设置参数为非必要参数。

基础URL传参前端:
在这里插入图片描述

后端接收基础URL部分参数:使用@PathVariable注解

	@RequestMapping("/m5/{name}/{pwd}")
    public String method_5(@PathVariable String name, @PathVariable String pwd){//@PathVariable注解表示,参数为基础URL传参。
        System.out.println("=================================");
        System.out.println(name + " " + pwd);
        System.out.println("=================================");
        return "基础URL传参";
    }

后端处理后成功打印信息:
在这里插入图片描述

6、上传文件 @RequestPart

注意点:
【SpringBoot文档】

易错点:文件传输有大小限制。在SpringBoot文档中,注明了默认上传文件最大为1MB,请求最大为10MB,这两个参数可以在我们项目的 application配置文件中修改大小。
在这里插入图片描述
修改如下图:spring.servlet.multipart.max-file-size和spring.servlet.multipart.max-request-size
在这里插入图片描述

上传文件正式操作:
前端上传文件:选择表单,然后填写文件上传的key(后端用这个key接收上传文件),选择上传文件并上传。
在这里插入图片描述
后端处理文件上传: 将文件保存在E盘路径下
在这里插入图片描述

代码如下:

@RestController
public class UpLoadController {
    //4.上传文件
    @RequestMapping("/myUpload")
    public String Upload(@RequestPart("myImg") MultipartFile file) throws IOException {
        System.out.println("=================================");
        String originalFileName = file.getOriginalFilename();
        // 1>获得上传文件后缀名
        String hzName = originalFileName.substring(originalFileName.lastIndexOf("."));
        // 2>获得文件保存地址(使用唯一标识,确保同一时刻多个用户上传文件不会覆盖)
        String filePath = "E:/"+ UUID.randomUUID() + hzName;  //(空指针异常)

        System.out.println(filePath);

        File saveFile = new File(filePath);
        try {
            file.transferTo(saveFile);//保存文件
            System.out.println("文件上传成功!");
            System.out.println("=================================");
            return "上传文件成功!";
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传文件失败!!!";
    }
}

二、关于参数的设置

1、后端参数重命名和必传参数 后端用@RequestParam注解

场景描述:
当前端发送和后端接收的参数名称不一致时,可以使用@RequestParam给后端参数重命名。这样就在后端可以使用和前端名称不一致的参数获取到前端的值。具体操作如下:

前端发送http请求:使用name传参
在这里插入图片描述
后端接收请求:
在这里插入图片描述

@RequestParam会自动给一个必传参数(上图name默认是必传参数),也就是说此时前端必须用name传参,而不能再使用与后端相同名称的参数username传参。

2、非必传参数设置

注意:如果有个参数是非必传参数,可以使用@RequestParam(value = "name", required = false)来限制,此时该参数就可传可不传,如下代码:

	@RequestMapping("/m3")
    public String method_3(@RequestParam(value = "name", required = false) String username, String password){
        return  "后端参数重命名";
    }

三、后端关于前端各类参数接收

1、获取Cookie——@CookieValue

获取Cookie的后端代码:使用@CookieValue注解

@RestController
public class TestController {
    @RequestMapping("/getCookie")
    public String func_1(@CookieValue("cookieKey") String cookie){
        return "cookie" + cookie;
    }
}

在这里插入图片描述

注意后端的CookieKey要和前端的cookie名称相同,可以通过在前端浏览器界面打开开发者工具添加指定的cookie进行验证,如下图。
在这里插入图片描述

后端处理后前端显示内容:
在这里插入图片描述

2、获取Header参数——@RequestHeader

后端获取Header信息:只需修改代码中注解内的信息,即可得到相应的请求头信息。

//2、获取header
    @RequestMapping("/getHeader")
    public String func_2(@RequestHeader("User-Agent") String headerMsg){
        return headerMsg;
    }

在这里插入图片描述

前端请求和响应信息:
在这里插入图片描述

3、获取Session——@SessionAttribute

要想获取session,得先保存session。如下图:

保存session:
在这里插入图片描述

	@RequestMapping("/setSession")
    public String func_3(HttpServletRequest request){
        HttpSession session = (HttpSession) request.getSession(true);
        if (session != null){
            session.setAttribute("username", "张三");
        }
        return "set session succeed!";
    }

浏览器请求URL和显示信息:
在这里插入图片描述

获取session:
在这里插入图片描述

	@RequestMapping("/getSession")
    public String func_4(@SessionAttribute(value = "username", required = false)
                                     String uname){
        return "username:" + uname;
    }

浏览器请求URL和显示信息:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学Java的冬瓜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值