五、Spring MVC 接收请求参数以及数据回显、乱码问题

news/2024/5/10 19:42:38/文章来源:https://blog.csdn.net/shiyu_951/article/details/132327554

文章目录

  • 一、Spring MVC 接收请求参数
  • 二、Spring MVC 数据回显
  • 三、SpringMVC 返回中文乱码问题




一、Spring MVC 接收请求参数


客户端或者前端通过 URL 请求传递过来的参数,在控制器中如何接收?

  • 1、当参数和 Controller 中的方法参数一致时,无需做处理,可以正常接收

    • 代码示例以及对应 URL

      • http://localhost:8080/user?name=sys

            @RequestMapping("/user")public String getUser(Model model, String name) {model.addAttribute("msg", "name为" + name);return "test";}
        
    • 测试结果

  • 2、当参数和 Controller 中的方法参数不一致时,需要通过 @RequestParam 控制

    • 代码示例以及对应 URL

      • http://localhost:8080/user2?username=sys

            @RequestMapping("/user2")public String getUser2(Model model, @RequestParam("username") String name) {model.addAttribute("msg", "name为" + name);return "test";}
        
    • 测试结果

  • 3、当提交的参数与实体类中的属性一致,可以直接使用实体类接收即可

    • 代码示例以及对应 URL

      • http://localhost:8080/user?name=sys&age=99

      • 实体类

        @Data
        public class User {private String id;private String name;private int age;
        }
        
      • controller

        @RequestMapping("/user3")
        public String getUser3(Model model, User user) {model.addAttribute("msg", "id为" + user.getId()+"\n\t"+"name为" + user.getName()+"\n\t"+"age为" + user.getAge());return "test";
        }
        
    • 测试结果

    • 注:如果客户端传递的参数和实体类属性不一致,则默认给个 null




二、Spring MVC 数据回显


数据显示到前端有三种方式:ModelAndView、ModelMap、Model

  • 通过 ModelAndView 将数据返回给前端,需要搭配 Servlet API 使用。ModelAndView指模型和视图的集合,既包含模型 又包含视图;ModelAndView其实就是两个作用,一个是指定返回页面,另一个是在返回页面的同时添加属性(也就是返回的数据);

    public class ModelAndViewController implements Controller {public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse ref) throws Exception {//返回一个模型视图对象ModelAndView mv = new ModelAndView();// 获取要返回给客户端的数据,这里默认给个 ModelAndViewController mv.addObject("msg","ModelAndViewController ");// 获取视图名称mv.setViewName("test");// 返回模型和视图return mv;}
    }
    
  • 通过 ModelMap 将数据返回给前端。ModelMap继承LinkedHashMap,spring框架自动创建实例并作为controller的入参,用户无需自己创建

    @RequestMapping("/hello")
    public String hello(@RequestParam("username") String name, ModelMap model){//封装要显示到视图中的数据//相当于req.setAttribute("name",name);model.addAttribute("name",name);// 返回视图名称return "test";
    }
    
  • 通过 Model 将数据返回给前端。Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类

    @RequestMapping("/hello")
    public String hello(@RequestParam("username") String name, Model model){//封装要显示到视图中的数据//相当于req.setAttribute("name",name);model.addAttribute("msg",name);// 返回视图名称return "test";
    }
    




三、SpringMVC 返回中文乱码问题


  • 方法一:在 web.xml 文件中对乱码问题进行了配置,配置代码如下:

    <!-- 配置过滤器 -->
    <filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
    </filter>
    <filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern>
    </filter-mapping>
    

  • 方法二:在 @RequestMapping 中添加 produces 参数,但是有着较大的局限性

    • 局限性一:需要在每一个接口中都加上 "produces=“text/json;charset=utf-8” 这段代码,太过麻烦且代码质量不高

    • 局限性二:不知有着 text/json,还有着其他不同种类的数据,而配置只能选一种


  • 方法三: 在Spring-mvc.xml配置文件统一处理

    • 在< mvc:annotation-driven/ >中添加如下内容:

      <mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>application/json;charset=UTF-8</value><value>text/plain;charset=UTF-8</value><value>text/html;charset=UTF-8</value><value>text/json;charset=UTF-8</value></list></property></bean>
      </mvc:message-converters>
      

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之迭代器模式(Iterator)的C++实现

1、迭代器模式的提出 在软件开发过程中&#xff0c;操作的集合对象内部结构常常变化&#xff0c;在访问这些对象元素的同时&#xff0c;也要保证对象内部的封装性。迭代器模式提供了一种利用面向对象的遍历方法来遍历对象元素。迭代器模式通过抽象一个迭代器类&#xff0c;不同…

Qt安卓开发经验技巧总结V202308

01&#xff1a;01-05 pro中引入安卓拓展模块 QT androidextras 。pro中指定安卓打包目录 ANDROID_PACKAGE_SOURCE_DIR $$PWD/android 指定引入安卓特定目录比如程序图标、变量、颜色、java代码文件、jar库文件等。 AndroidManifest.xml 每个程序唯一的一个全局配置文件&…

多地图-RRT算法规划路径

RRT算法 %% %% 初始化 mapim2bw(imread(map2.bmp)); % bmp无损压缩图像500x500,im2bw把灰度图转换成二值图像01 source[10 10]; % 起始点位置 goal[490 490]; % 目标点位置 stepsize20; % RRT每步步长 disTh20; % 直到qnearest和目标点qgaol距离小于一个阈值 maxFailedAttemp…

通过LD_PRELOAD绕过disable_functions

LD_PRELOAD LD_PRELOAD是Linux/Unix系统的一个环境变量&#xff0c;它可以影响程序的运行时的链接&#xff0c;它允许在程序运行前定义优先加载的动态链接库。通过这个环境变量&#xff0c;可以在主程序和其动态链接库的中间加载别的动态链接库&#xff0c;甚至覆盖系统的函数…

微人事 部门管理 模块 (十五)

部门管理的树展示和搜索 数据展示页是个树&#xff0c;我们一次性把数据加载出来也可以通过点一次id加载查询出来出来子部门&#xff0c;我们用一次拿到说有json数据加载出来 数据不多可以用递归&#xff0c;数据很多就用懒加载的方式 由于子部门比较深就不适合&#xff0c;权…

(win系统)MSVCP100/110/120/140.dll丢失 - 解决方案

首先我们来介绍一下什么是dll dll简称动态链接库它可以节省存储空间&#xff1a;由于DLL可以被多个程序共享&#xff0c;因此可以减少磁盘空间的使用。也能提高代码重用率&#xff1a;通过使用DLL,我们可以将一些常用的功能封装成独立的模块&#xff0c;从而提高代码的重用率。…

电脑上安装,多版本node

手上有一个vue3的项目&#xff0c;sass配置如下图所示&#xff1a; 安装了Python3.10和node 16.14.0&#xff0c;项目能正常install 跟run。 因工作需要&#xff0c;收上有一个vue2的项目&#xff0c;sass配置如下图所示&#xff1a; 执行npm intsall 的时候一直报Python2找不…

第18集丨Vue脚手架的默认配置

目录 一、查看默认配置1.1 在此系统中禁止执行脚本1.2 错误解决方案1.3 执行成功生成的配置项 二、关闭语法检查 一、查看默认配置 Vue脚手架隐藏了所有 webpack 相关的配置&#xff0c;若想查看具体的 webpak 配置&#xff0c;请执行&#xff1a;vue inspect > output.js …

nodejs使用PassThrough流进行数据传递合并

在Node.js中&#xff0c;流&#xff08;stream&#xff09;是处理数据的强大工具&#xff0c;它们允许我们以流式方式处理大量数据&#xff0c;而不必一次性将所有数据加载到内存中。PassThrough是Node.js中的一个流类型&#xff0c;它在数据流传递过程中起到 无操作 的中间层&…

22.0.6 LEADTOOLS 增加了 Python 支持 -Crack

LEADTOOLS 增加了 Python 支持 Python 开发人员现在可以利用 LEADTOOLS 技术&#xff0c;包括识别、多媒体和成像。 2023 年 7 月 18 日 - 16:40新版本 特征 添加了完整的 Python 支持 LEADTOOLS Python 支持包括高级图像处理功能、OCR、PDF、条形码识别和表单处理&#xff0c;…

OpenCV图片校正

OpenCV图片校正 背景几种校正方法1.傅里叶变换 霍夫变换 直线 角度 旋转3.四点透视 角度 旋转4.检测矩形轮廓 角度 旋转参考 背景 遇到偏的图片想要校正成水平或者垂直的。 几种校正方法 对于倾斜的图片通过矫正可以得到水平的图片。一般有如下几种基于opencv的组合方…

LLM架构自注意力机制Transformers architecture Attention is all you need

使用Transformers架构构建大型语言模型显著提高了自然语言任务的性能&#xff0c;超过了之前的RNNs&#xff0c;并导致了再生能力的爆炸。 Transformers架构的力量在于其学习句子中所有单词的相关性和上下文的能力。不仅仅是您在这里看到的&#xff0c;与它的邻居每个词相邻&…

docker的资源控制及数据管理

docker的资源控制及docker数据管理 一.docker的资源控制 1.CPU 资源控制 1.1 资源控制工具 cgroups&#xff0c;是一个非常强大的linux内核工具&#xff0c;他不仅可以限制被 namespace 隔离起来的资源&#xff0c; 还可以为资源设置权重、计算使用量、操控进程启停等等。 …

苍穹外卖 day1 搭建成功环境

引入 idea找不到打包生成的文件目录怎么办&#xff0c;首先点击这个小齿轮 show ecluded files然后就能找到隐藏的文件 这个jar包内含tomcat&#xff0c;可以直接丢在linux上用 开发环境&#xff1a;开发人员在开发阶段使用的环境&#xff0c;一般外部用户无法访问 测试环…

shell脚本之循环语句

循环语句 循环含义 将某代码段重复运行多次&#xff0c;通常有进入循环的条件和退出循环的条件 for循环语句 一般知道循环次数使用for循环 第一类 格式1&#xff1a; for名称 in 取值次数;do;done; 格式2&#xff1a; for 名称 in {取值列表} do done# 打印20次 for i i…

k8s之Pod及Probe 探针机制(健康检查机制)

文章目录 1、Pod1.1、定义1.2、Pod的形式1.2、Pod的使用1.3、 Pod生命周期1.4、生命周期钩子1.5、临时容器1.5.1、定义1.5.2、使用临时容器的步骤 1.6、静态Pod 2、Probe 探针机制&#xff08;健康检查机制&#xff09;2.1、探针分类2.2、Probe配置项2.3、编写yaml测试探针机制…

学C的第三十四天【程序环境和预处理】

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十三天【C语言文件操作】_高高的胖子的博客-CSDN博客 1 . 程序的翻译环境和执行环境 在ANSI C(C语言标准)的任何一种实现中&#xff0c;存在两个不同的环境。 &#xff0…

PyTorch学习笔记(十六)——利用GPU训练

一、方式一 网络模型、损失函数、数据&#xff08;包括输入、标注&#xff09; 找到以上三种变量&#xff0c;调用它们的.cuda()&#xff0c;再返回即可 if torch.cuda.is_available():mynn mynn.cuda() if torch.cuda.is_available():loss_function loss_function.cuda(…

1339. 分裂二叉树的最大乘积

链接&#xff1a; ​​​​​​1339. 分裂二叉树的最大乘积 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

Java性能分析中常用命令和工具

当涉及到 Java 性能分析时&#xff0c;有一系列强大的命令和工具可以帮助开发人员分析应用程序的性能瓶颈、内存使用情况和线程问题。以下是一些常用的 Java 性能分析命令和工具&#xff0c;以及它们的详细说明和示例。 以下是一些常用的性能分析命令和工具汇总&#xff1a; …