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

news/2025/1/15 23:23:29/

文章目录

  • 一、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.ppmy.cn/news/1047573.html

相关文章

HCIP学习--STP

在交换机上的线路冗余会产生的问题 昨天讲到了一个冗余的概念&#xff0c;下面就这个冗余引出来的问题来记录今天的内容 线路的冗余对于路由器来岁意味择可以选择更多的路线&#xff0c;但是对于交换机来说可不是啥好事情 比如下图假设A下面有一台设备要发送一个广播&#x…

[国产MCU]-W801开发实例-W801SDK介绍及启动过程解析

W801SDK介绍及启动过程解析 文章目录 W801SDK介绍及启动过程解析1、W801SDK目录结构解析2、W801SDK启动流程2.1 芯片级启动流程2.2 系统初始化2.3 板级初始化2.4 SDK级启动流程本文将详细介绍W801的SDK及启动过程,为后面的应用开发打下基础。 1、W801SDK目录结构解析 在前面…

Python 编程快速入门

参考引用 Python编程&#xff1a;从入门到实践&#xff08;第2版&#xff09; 1. 环境配置 VSCode 中配置 Python 运行环境 2. 变量和简单数据类型 2.1 变量 添加了一个名为 message 的变量。每个变量都指向一个值&#xff1a;与该变量相关联的信息为指向的值为文本 “Hell…

Android学习之路(8) Activity

本节引言&#xff1a; 本节开始讲解Android的四大组件之一的Activity(活动)&#xff0c;先来看下官方对于Activity的介绍&#xff1a; 移动应用体验与桌面体验的不同之处在于&#xff0c;用户与应用的互动并不总是在同一位置开始&#xff0c;而是经常以不确定的方式开始。例如&…

更新Ubuntu18.04上的CUDA和GCC

问题&#xff1a; 有一台服务器的GPU是1080&#xff0c;有八张卡&#xff0c;已经好久没有人用了。cuda版本是10.1,我现在拿来复现一些论文的模型&#xff0c;经常遇到版本依赖问题&#xff0c;报错Driver is too old。所以要更新一下驱动。遇到的主要问题是gcc版本也太低了&am…

设计模式详解-迭代器模式

类型&#xff1a;行为型模式 实现原理&#xff1a;提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 作用&#xff1a;用于顺序访问集合对象的元素&#xff0c;不需要知道集合对象的底层表示 解决的问题&#xff1a;不同的方式遍历整个整合对象…

树结构转List

使用LinkedList效率更高 1、单个顶级节点 public static List<CmsStudentOutline> getTreeList(CmsStudentOutline root) {List<CmsStudentOutline> list new ArrayList<>();Queue<CmsStudentOutline> queue new LinkedList<>();if (root nu…

深入AQS原理(我在一开始学的时候就把非公平锁和公平锁给弄混了)

谈到并发&#xff0c;我们不得不说AQS(AbstractQueuedSynchronizer)&#xff0c;所谓的AQS即是抽象的队列式的同步器&#xff0c;内部定义了很多锁相关的方法&#xff0c;我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQS来实现的。 …