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

文章目录

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

一、Spring MVC 接收请求参数

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

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

    • 代码示例以及对应 URL

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

        java 复制代码
            @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

        java 复制代码
            @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

      • 实体类

        java 复制代码
        @Data
        public class User {
            private String id;
            private String name;
            private int age;
        }
      • controller

        java 复制代码
        @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其实就是两个作用,一个是指定返回页面,另一个是在返回页面的同时添加属性(也就是返回的数据);

    java 复制代码
    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的入参,用户无需自己创建

    java 复制代码
    @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类

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

三、SpringMVC 返回中文乱码问题

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

    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/ >中添加如下内容:

      xml 复制代码
      <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>
相关推荐
逻辑驱动的ken29 分钟前
Java高频面试场景题25
java·开发语言·深度学习·面试·职场和发展
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第32题:Java的异常处理机制是什么
java·开发语言·后端·面试
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 小时前
通过java后端代码来实现给word内容补充格式文本内容控件,以及 设置控件的标记和标题
java·c#·word
無限進步D3 小时前
Java 面向对象高级 接口
java·开发语言
逸Y 仙X4 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
二哈赛车手4 小时前
新人笔记---Spring AI的Advisor以及其底层机制讲解(涉及源码),包含一些遇见的Spring AI的Advisor缺陷问题的解决方案
java·人工智能·spring boot·笔记·spring
薪火铺子4 小时前
Redis 缓存三大问题与解决方案
redis·spring·缓存
AC赳赳老秦4 小时前
接口测试自动化:用 OpenClaw 对接 Postman,实现批量回归测试、测试报告自动生成与推送
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
两年半的个人练习生^_^4 小时前
Java日志框架和使用、日志记录规范
java·开发语言·开发规范