五、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>
相关推荐
万琛1 分钟前
【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
java·neo4j
Bald Baby20 分钟前
JWT的使用
java·笔记·学习·servlet
魔道不误砍柴功25 分钟前
实际开发中的协变与逆变案例:数据处理流水线
java·开发语言
dj24429457071 小时前
JAVA中的Lamda表达式
java·开发语言
工业3D_大熊1 小时前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化
szc17671 小时前
docker 相关命令
java·docker·jenkins
程序媛-徐师姐1 小时前
Java 基于SpringBoot+vue框架的老年医疗保健网站
java·vue.js·spring boot·老年医疗保健·老年 医疗保健
yngsqq1 小时前
c#使用高版本8.0步骤
java·前端·c#
尘浮生1 小时前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea