五、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>
相关推荐
Kay_Liang5 分钟前
大语言模型如何精准调用函数—— Function Calling 系统笔记
java·大数据·spring boot·笔记·ai·langchain·tools
自由的疯22 分钟前
Java 如何学习Docker
java·后端·架构
自由的疯23 分钟前
Java Docker本地部署
java·后端·架构
007php00725 分钟前
猿辅导Java面试真实经历与深度总结(二)
java·开发语言·python·计算机网络·面试·职场和发展·golang
摇滚侠27 分钟前
Spring Boot 3零基础教程,WEB 开发 内容协商机制 笔记34
java·spring boot·笔记·缓存
一勺菠萝丶28 分钟前
在 macOS 上用 Docker 为 Java 后端 & 常见开发需求搭建完整服务(详尽教程)
java·macos·docker
顾漂亮34 分钟前
JVM底层攻坚
java·jvm·spring
编程岁月35 分钟前
java面试-0215-HashMap有序吗?Comparable和Comparator区别?集合如何排序?
java·数据结构·面试
William_cl36 分钟前
ASP.NET MVC 前置基础:宿主环境 & HttpRuntime 管道,从部署到流程拆透(附避坑指南)
后端·asp.net·mvc
木井巳44 分钟前
[Java数据结构与算法]详解排序算法
java·数据结构·算法·排序算法