Spring MVC【参数的获取与数据返回】

news2025/6/9 19:53:42

Spring MVC【参数的获取与上传】

  • 🍎一. 获取参数
    • 🍒1.1 获取单个参数
    • 🍒1.2 获取多个参数
    • 🍒1.3 获取多个参数
    • 🍒1.4 获取URL中参数 (@PathVariable)
  • 🍎二. 上传文件 (@RequestPart)
    • 🍒2.1 postman模拟上传文件
    • 🍒2.2 将文件上传到某个目录里
  • 🍎三. Cookie/Session/header的获取
    • 🍒3.1 Cookie获取
    • 🍒3.2 header获取
    • 🍒3.3 Session获取

上一篇文章介绍SpringMVC的概念,SpringMVC项目的创建,这一篇文章将介绍如何使用SpringMVC实现前端参数的获取与后端参数的返回等内容

🍎一. 获取参数

🍒1.1 获取单个参数

我们先创建一个对象来实现接下来的获取参数,我们来创建一个学生的信息
这里我们通过@Data注解来进行,来实现get,set,toString方法

/@Data注解包含 get()set()toString方法,如果没有@Data注解的话这个对象就必须实现这三个方法
@Data
@Controller
//伪代码
public class UserInfo {
    private int id;
    private String username;
    private String password;
    private int age;
}

我们创建好对象之后,就可以通过对象的set方法来进行获取参数,根据获取后的参加进行返回给服务器就可以看到获取参数的内容了

 @RequestMapping("/getuserbyid")
    //最好时包装类型数据Integer Character这种,不会在没有输入null值时报错,只会返回0
    public UserInfo getUserById(Integer id){
        //不查数据库,伪代码返回数据对象
        UserInfo userInfo = new UserInfo();
        userInfo.setId(id);
        //userInfo.setId(id);
        userInfo.setUsername("张三");
        userInfo.setPassword("123");
        userInfo.setAge(18);
        return userInfo;
    }

我们来通过postman来进行参数获取与返回
在这里插入图片描述

🍒1.2 获取多个参数

这个与上面同理,我们只需要改需要获取参数的内容与个数即可

  @RequestMapping("/login")
    public String getUser(String username,String password){
        
        return "用户名:" + username +" " +  "密码:" + password ;
    }

参数重命名:
当我们与前端约定参数的value值时认为不适合自己代码的编写时,我们就可以将前端设置好的代码进行自定义,但是还是以前端约定好的代码进行交互的,我们只需要在方法获取参数的内容里

使用@RequestParam(value = "name",required = false)即可设置:
value = "name"这个是前端与后端约定好交互的参数名称,我们就可以通过在后面定义一个参数名既可以了
required = false是因为如果前端没有传递此参数就会报错所有我们可以将required 设置为false就不会报错了

我们从这里既就可以看到应该输入的数name,但是通过value = “name”,就可以将name修改为username

  @RequestMapping("/login")
    public String getUser(@RequestParam(value = "name",required = false) String username,String password){
       
        return "用户名:" + username +" " +  "密码:" + password ;
    }

在这里插入图片描述

🍒1.3 获取多个参数

@RequestMapping("/reg")
    public String reg(@RequestBody UserInfo userInfo){
        //不查数据库,伪代码返回数据对象
        return "用户信息:" + userInfo ;
    }

在这里插入图片描述
JSON格式发送和接收数据(服务器需要使用 @RequestBody注解才能接收和发送 JSON的数据)

 @RequestMapping("/reg")
    //@RequestBody 可以获取到输入的数据但是输入的数据名要对应对象名的大小写和数据格式(json)
    public String reg(@RequestBody UserInfo userInfo){
        //不查数据库,伪代码返回数据对象
        return "用户信息:" + userInfo ;
    }

在这里插入图片描述

🍒1.4 获取URL中参数 (@PathVariable)

在这里插入图片描述

@RequestMapping("/login2/{username}/{password}")
    public String getUser2(@PathVariable String username,@PathVariable String password) {
        //不查数据库,伪代码返回数据对象
        return "用户名:" + username +" " + "密码:" + password;
    }

在这里插入图片描述

🍎二. 上传文件 (@RequestPart)

🍒2.1 postman模拟上传文件

 @RequestMapping("/upimg")
    public boolean upImg(Integer uid, @RequestPart("img")MultipartFile file){
        //设置一个能判图片是否上传成功
        boolean result = false;
        //保存图片到本地目录(服务器)
        try {
            //D\Data\img.png 这是设置了保存文件地址和文件名
            file.transferTo(new File("D:\\Data\\img.png"));
            result = true;
        } catch (IOException e) {
            // 引用 @Slf4j进行日志打印
            log.error("上传图片失败" + e.getMessage());
            // e.printStackTrace();
        }
        return result ;
    }

在这里插入图片描述

🍒2.2 将文件上传到某个目录里

我们在Windos 和 Linux系统上传的文件所保存的地址是不能一样的所有我们需要通过配置文件来进行开发和上线时进行分割,所有我们需要在创建一个application,yml配置文件 分别设置储存位置application-dev.yml(Windows),application-prod.yml(LInux)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码示例:
在这里插入图片描述

 @RequestMapping("/upimg2")
    public boolean upImg2(Integer uid, @RequestPart("img")MultipartFile file){
        //1.目录 = imgpath

        //2.图片名称(图片名称不能重复)[时间戳(高并发易产生BUG)/UUID(优选)]
        // UUID是全局唯一ID 所有我们一般在高并发会选择UUID进行唯一标志

        //3.获取原上传图片的格式(png,jpg)
        //获取文件名
        String filename = file.getOriginalFilename();
        //获取文件名 .后面的格式名(png,jpg)
        filename = filename.substring(filename.lastIndexOf("."));
        filename = UUID.randomUUID().toString() + filename;

        //设置一个能判图片是否上传成功
        boolean result = false;
        //保存图片到本地目录(服务器)
        try {
            //D\Data\img.png 这是设置了保存文件地址和文件名
            file.transferTo(new File(imgpath + filename));
            result = true;
        } catch (IOException e) {
            // 引用 @Slf4j进行日志打印
            log.error("上传图片失败" + e.getMessage());
           //   e.printStackTrace();
        }
        return result ;
    }

我们就可以看到我们上传的文件照片,并且名字也是和我们在上传保存在手机或磁盘中的文件名很相似,ID名称生成就是这样实现的
在这里插入图片描述

🍎三. Cookie/Session/header的获取

🍒3.1 Cookie获取

获取 Request 和 Response 对象

  //获取 Cookie (Servlet 或者 Spring MVC)
    @RequestMapping("/cookie")
    public void getCookie(HttpServletRequest request) {
       Cookie[] cookies = request.getCookies();
        for (Cookie item : cookies) {
            log.info("Cookie Name :" + item.getName() + "Cookie Vlaue :" + item.getValue());
        }
    }
   //使用CookieValue
    @RequestMapping("/cookie2")
    public String getCookie2(@CookieValue("bite") String cookie) {
        return "Cookie Value" + cookie;
    }

🍒3.2 header获取

传统获取 HttpSelectRequest

/获取 Header (Servlet 或者 Spring MVC)
    @RequestMapping("/gettua")
    //获取请求头UA
    public String gethead(HttpServletRequest request){
        return  "header:" +request.getHeader("User-Agent");
    }

简洁获取 Header—@RequestHeader

  @RequestMapping("/gettua2")
    //获取请求头U A
    public String gethead2(@RequestHeader("User-Agent") String useragent){
        return  "header:" +useragent;
    }

🍒3.3 Session获取

Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的,如下代码所示:

  //存储和获取 Session

    //(存储 Servlet 和 Spring MVC 是一样的)
    @RequestMapping("/setsession")
    public boolean setSession(HttpServletRequest request) {
        boolean result = false;
        // 1. 得到 HttpSession
        HttpSession session = request.getSession(true);//如果 = ture的话就代表没有会话,那么就会自动创建会话

        // 2. 使用 setAtt 设置值
        session.setAttribute("userinfo", "userinfo");
        result = true;
        return result;
    }
// 1. 获取Session(Servlet 模式):
    @RequestMapping("/getsession")
      public String gerSession(HttpServletRequest request){
        String result = null;
        // 1. 先得到HttpSession 对象
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute("userinfo") != null){
            result  = (String) session.getAttribute("userinfo");
        }
        // 2. getAtt 得到 SEssion 信息
        return result;
    }
// 2. 获取Session(Spring MVC 模式 @SessionAttribute):
    @RequestMapping("/getsession2")
    public String getSession2(@SessionAttribute(value = "userinfo",required = false) String userinfo){
        return "会话" + userinfo;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测论文解读复现【NO.23】FS-YOLOv5:轻量化红外目标检测方法

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

33个CadQuery程序化建模实例

本文介绍的33个建模示例可以帮助你了解如何使用 CadQuery 构建3D对象。示例是从简单到复杂组织起来的,因此按顺序学习它们是吸收它们的最佳方式。 1、简易矩形板 最简单的例子,一个矩形盒子: result cadquery.Workplane("front&qu…

食品加工企业自营商城小程序开发,帮助企业增加销售渠道,提高销量

随着生活水平的不断提高,人们对于食品质量提出了更高的要求。传统人们购买食品时只能到超市或者市场进行食品采购,需要花费一定的时间和精力,而且经过多层中间商赚取差价的原因性价比也并不高。在移动电商的时代发展下,很多企业商…

『 canvas 动画』为了让老婆彻底理解正弦和余弦,我连夜制作了这个效果

前言 最近在做 canvas 相关的效果时,经常用到三角函数以及正/余弦相关的数字知识,这些知识点都是我们在初中的时候就学过的,但是这么多年基本已经忘的差不多了,刚好最近又学到了一个用 canvas 来实现的正/余弦动画效果&#xff0…

成功转行Python工程师,年薪30W+,经验总结都在这

这是给转行做Python的小白的参考,无论是从零开始,或者是转行的朋友来说,这都是值得一看的,也是可以作为一种借鉴吧。 而且我决定转行IT(互联网)行业,其实理由也很简单,不用动体力&a…

循环冗余编码(CRC编码)与海明码(考研前突击一下QAQ)

循环冗余编码(CRC编码)与海明码 一.环冗余编码 1.循环冗余编码的形成 生成多项式:G1011 表示成生成多项式为G(x)X3X1X^3X1X3X1 示例: 假设信息字节为:F1001010 选取生成多项式(默认)G1011 将…

2022年下半年部分团队的总结

这是 2021 年年底的汇报。 这是 2022 年上半年的汇报。 踏石留印 抓铁有痕 CSDN 是中国 IT 人士学习,成长,成功的平台。除了一些创新的探索之外, 20 多年来,CSDN 团队为这个平台开发和维护着各种基本功能和服务,还进…

自动化测试技术笔记(一):前期调研怎么做

昨天下午在家整理书架,把很多看完的书清理打包好,预约了公益捐赠机构上门回收。 整理的过程中无意翻出了几年前的工作记事本,里面记录了很多我刚开始做自动化和性能测试时的笔记。虽然站在现在的角度来看,那个时候无论是技术细节…

“ 这片绿茵从不缺乏天才,努力才是最终的入场券——梅西 ”

前言 想了又想还是忍不住想发布一篇文章来纪念一下2022年的卡塔尔世界杯,这伟大的诸神黄昏之战。4年一届的世界杯像是一把衡量时间的坐标,正所谓青春不过几届世界杯!2014巴西世界杯在上初一,2018俄罗斯世界杯在上高二,…

如何成为一名合格的互联网大厂Python工程师?

Python开发工程师,是一个在IT行业圈子里一直都很热门的话题,无论是像腾讯、百度这样的大型公司,还是刚刚起步的初创公司,都会招python开发工程师。 python已成为越来越多开发者的开发语言选择, 而python开发工程师工资…

[附源码]计算机毕业设计Python架构的博客平台设计(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

【Python计算几何】德劳内三角剖分算法 | scatter 绘制散点图 | Dealunay 函数

猛戳!跟哥们一起玩蛇啊 👉 《一起玩蛇》🐍 💭 写在前面: 本章我们将介绍的是计算机和领域的 Delaunay 三角剖分算法(即德劳内三角剖分),它是一种用于将点集划分成三角形网格的算法。…

如何同时启动Android平台GB28181设备接入模块和轻量级RTSP服务模块?

技术背景 在介绍GB28181设备接入模块和轻量级RTSP服务之前,我们需要先搞清楚,二者的使用场景和技术设计的差别: 首先是GB28181设备接入模块: 为什么要设计GB28181设备接入模块?GB28181接入SDK,实现不具备…

软件:分享六款实用的软件,每一款值得收藏

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

[XCTF]funny_video(难度2)

目录 一、题目重述 二、解题思路 1.分解音视频 2.处理音频 总结 前言 视频夹杂着一段音频,怎么提取?遇到一款新的工具!MKVToolNix 特此记录! 一、题目重述 一段视频,观看之后发现有一段还夹杂着音频。 XCTF-fu…

避坑指南!Python里面的这九个坑,坑的就是你

Python里面有一些坑,让你防不胜防,菜鸟经常会弄晕,而学习多年的Python老鸟也会时不时中招。小编整理了9个坑,都是会经常碰到的坑,让你大呼我曾经也碰到过! 虽然是小的问题,但是在实际的项目中,哪…

测出让人血压升高的页面崩溃,我是如何排查的

前情回顾 前几天在一次web应用测试过程中,前端发起了向后端接口的查询请求,由于后端响应较慢,前端一直处于等待响应返回状态。在几分钟后,突然页面出现让人惊悚的“噢噢,页面崩溃了”几个大字。 看到这几个字的一瞬间…

用于销售、报告等的 LearnDash Group Management LMS分组管理插件

目录 获取强大、直观的LearnDash LMS组管理和报告 使用 LearnDash Groups LMS分组管理插件进行 B2B 销售 节省设置分组的时间或让客户自己构建和购买! 获取强大、直观的LearnDash LMS组管理和报告 LearnDash分组是将学生组织成逻辑单元以进行报告和课程访问的绝…

java回顾:Maven高级

目录 一、私服搭建 二、Maven高级 2.1、依赖范围 2.2、依赖传递 2.3、依赖可选 2.4、依赖排除 2.5、依赖冲突 三、ssm工程改造成分层构建 3.1、maven的继承 3.2、继承的一些应用 3.3、maven的聚合(多模块开发) 一、私服搭建 https://blog.…

rust语句,表达式以及函数

语句和表达式 在rust里,语句和表达式的区别是非常重要的。语句没有返回值,表达式有返回值。例如: fn main() {let y {let x 3; // 赋值语句x 1 // 表达式};println!("The value of y is: {}", y); }上面使用一…