当前位置: 首页 > news >正文

SpringMVC:SpringMVC五种类型参数传递(4)

请求参数

  • 1. 环境准备
  • 2. 参数传递
    • 2.1 GET请求
      • 2.1.1 GET发送一个参数
      • 2.1.2 GET发送多个参数
      • 2.1.3 GET请求中文乱码
    • 2.2 POST请求
      • 2.2.1 POST发送一个参数
      • 2.2.2 POST发送多个参数
      • 2.2.3 POST请求中文乱码问题
  • 3. 五种类型参数传递
    • 3.1 普通参数
    • 3.2 POJO类型参数
    • 3.3 嵌套POJO类型参数
    • 3.4 数组类型参数
    • 3.5 集合类型参数

1. 环境准备

项目结构

在这里插入图片描述

pom.xml配置文件

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
    </dependencies>


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>  <!--tomcat端口号-->
                    <path>/</path>  <!--虚拟目录-->
                </configuration>
            </plugin>
        </plugins>
    </build>

config包下的ServletContainersInitConfig类

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

import javax.servlet.Filter;

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    /**
     * 加载springmvc配置类
     *
     * @return
     */
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    /**
     * 设置由springmvc控制器处理的请求映射路径
     *
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * 加载spring配置类
     *
     * @return
     */
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

config包下的核心配置文件SpringMvcConfig类

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}

controller包下的UserController类

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {

}

pojo包下的Address类

public class Address {
    private String province;
    private String city;
    // 省略set/get方法
    .....
}

pojo包下的User类

public class User {
    private String name;
    private Integer age;
    private Address address;
    // 省略set/get方法
    ....
}

2. 参数传递

2.1 GET请求

2.1.1 GET发送一个参数

UserController类中方法准备


    @RequestMapping("/commonParam")
    @ResponseBody
    public String commonParam(String name){
        System.out.println("普通参数传递 name: = " + name );
        return "{'module':'commonParam'}";
    }

Postman发送GET请求

在这里插入图片描述

IDEA控制台接收返回结果

在这里插入图片描述

2.1.2 GET发送多个参数

UserController类中方法准备

    @RequestMapping("/commonParam")
    @ResponseBody
    public String commonParam(String name, int age){
        System.out.println("普通参数传递 name: = " + name + ", age = " + age);
        return "{'module':'commonParam'}";
    }

Postman发送GET请求

在这里插入图片描述

IDEA控制台接收返回结果

在这里插入图片描述

2.1.3 GET请求中文乱码

Postman发送带中文参数的GET请求

在这里插入图片描述

IDEA控制台接收返回结果发现存在中文乱码

在这里插入图片描述

GET请求方式存在中文乱码问题解决方式:在pom.xml配置文件中添加解决中文乱码的方式

在这里插入图片描述

Postman再次发送GET请求,并查看IDEA控制台接收返回结果

在这里插入图片描述

2.2 POST请求

2.2.1 POST发送一个参数

UserController类中方法准备


    @RequestMapping("/commonParam")
    @ResponseBody
    public String commonParam(String name){
        System.out.println("普通参数传递 name: = " + name );
        return "{'module':'commonParam'}";
    }

Postman发送带中文的GET请求

在这里插入图片描述

IDEA控制台接收返回结果

在这里插入图片描述

2.2.2 POST发送多个参数

UserController类中方法准备

    @RequestMapping("/commonParam")
    @ResponseBody
    public String commonParam(String name, int age){
        System.out.println("普通参数传递 name: = " + name + ", age = " + age);
        return "{'module':'commonParam'}";
    }

Postman发送POST请求

在这里插入图片描述

IDEA控制台接收返回结果

在这里插入图片描述

2.2.3 POST请求中文乱码问题

Postman发送带中文的POST请求

在这里插入图片描述

IDEA控制台接收返回结果发现存在中文乱码问题

在这里插入图片描述

POST请求方式存在中文乱码问题解决方式:在ServletContainersInitConfig类中配置过滤器

在这里插入图片描述

Postman再次发送POST请求,并查看IDEA控制台接收返回结果

在这里插入图片描述

3. 五种类型参数传递

3.1 普通参数

前面的GET请求和POST请求已经对普通参数进行了讲解,在这里不过多阐述。通过要注意一个问题,那就是如果形参与地址参数名不一致如何解决???

在这里插入图片描述

IDEA窗口显示如下:可以发现userName为null,因为前端给的是name,后台接收使用的是userName,两个名称对不上,导致接收数据失败。

在这里插入图片描述

解决方案: 使用@RequestParam注解

在这里插入图片描述

Postman再次发送请求

在这里插入图片描述

3.2 POJO类型参数

POJO参数请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

  • POJO参数接收,前端GET和POST发送请求数据的方式不变。
  • 请求参数key的名称要和POJO中属性的名称一致,否则无法封装。

UserController类中方法准备

Postman发送GET请求

在这里插入图片描述

在这里插入图片描述

Postman发送POST请求

在这里插入图片描述

在这里插入图片描述

3.3 嵌套POJO类型参数

嵌套POJO参数请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

请求参数key的名称要和POJO中属性的名称一致,否则无法封装

User类中嵌套Address属性

在这里插入图片描述

UserController类中方法准备

在这里插入图片描述

Postman发送GET请求

在这里插入图片描述

在这里插入图片描述

Postman发送POST请求

在这里插入图片描述

在这里插入图片描述

3.4 数组类型参数

数组参数请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数

UserController类中方法准备

在这里插入图片描述

Postman发送GET请求

在这里插入图片描述

在这里插入图片描述

Postman发送POST请求

在这里插入图片描述

在这里插入图片描述

3.5 集合类型参数

集合参数同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据

  • 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系
  • 对于简单数据类型使用数组会比集合更简单些。

UserController类中方法准备

在这里插入图片描述

Postman发送GET请求

在这里插入图片描述

在这里插入图片描述

Postman发送POST请求

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 微信小程序 | 小程序WXSS-WXML-WXS
  • 蓝桥杯入门即劝退(十六)查找元素范围(双解法)
  • Servlet转发与重定向
  • 【C语言进阶】参加面试怎能不会结构体?进来学,手把手教会你结构体的原理与使用
  • JSP运动会信息网站
  • 大数据呀大数据
  • C#编程基础(万字详解,这一篇就够了)
  • 滑动窗口的最大值【滑动窗口问题】
  • MYSQL 8.0 -- 事务中删除不存在的记录导致死锁
  • [1181]linux两台服务器之间传输文件和文件夹
  • 题:付账问题
  • python中的字典详解
  • C++11标准模板(STL)- 算法(std::minmax)
  • STM32F4 | PWM输出实验
  • Nginx快速入门笔记
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Apache的80端口被占用以及访问时报错403
  • Codepen 每日精选(2018-3-25)
  • create-react-app做的留言板
  • JavaScript 一些 DOM 的知识点
  • Redash本地开发环境搭建
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue--数据传输
  • 从输入URL到页面加载发生了什么
  • 规范化安全开发 KOA 手脚架
  • 简析gRPC client 连接管理
  • 类orAPI - 收藏集 - 掘金
  • 跳前端坑前,先看看这个!!
  • 网页视频流m3u8/ts视频下载
  • 云大使推广中的常见热门问题
  • postgresql行列转换函数
  • 我们雇佣了一只大猴子...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (4.10~4.16)
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (规划)24届春招和25届暑假实习路线准备规划
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ****Linux下Mysql的安装和配置
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 命令行参数包含应用程序路径吗?
  • .net 怎么循环得到数组里的值_关于js数组
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net小白的大学四年,内含面经
  • @media screen 针对不同移动设备