Spring MVC各种参数进行封装

这篇具有很好参考价值的文章主要介绍了Spring MVC各种参数进行封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、简单数据类型

1.1 控制器方法

1.2 测试结果

二、对象类型

2.1 单个对象

2.1.1 控制器方法

2.1.2 测试结果

2.2 关联对象

2.2.1 控制器方法

2.2.2 测试结果

三、集合类型

3.1 简单数据类型集合

3.1.1 控制方法

3.1.2 测试结果

3.2 对象数据类型集合

3.2.1 控制器方法

3.2.2 测试结果

3.3 Map集合

3.3.1 控制器方法

3.3.2 测试结果 

往期专栏&文章相关导读 

1. Maven系列专栏文章

2. Mybatis系列专栏文章

3. Spring系列专栏文章 

4. Spring MVC系列专栏文章  


一、简单数据类型

在Servlet中我们通过 request.getParameter(name) 获取请求参数。该方式存在两个问题:

  1. 请求参数较多时会出现代码冗余。
  2. 与容器紧耦合

而SpringMVC支持参数注入的方式用于获取请求数据,即将请求参数直接封装到方法的参数当中。用法如下:

1.1 控制器方法

// 获取简单类型参数
    @RequestMapping("/c1/param1")
    public void simpleParam(String username,int age){
        System.out.println(username+" "+age);
    }

        由于我们没有配置对应的param1页面,这是直接在控制台打印出访问的参数是多少。 访问该方法时,请求参数名和方法参数名相同,即可完成自动封装。并在控制台打印出来。执行路径为:http://localhost:8080/c1/param1?username=LYL&age=19

1.2 测试结果

Spring MVC各种参数进行封装

OK,确实是在控制台成功输出了,说明封装成功,接下来我们讲一下对象类型。 

二、对象类型

SpringMVC支持将参数直接封装为对象,首先我们先新建一个学生类。如下:

Student 

package com.example.domain;


public class Student {
    private int id;
    private String name;
    private String sex;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                " ]";
    }
}

2.1 单个对象

2.1.1 控制器方法

// 获取对象类型参数
    @RequestMapping("/c1/param2")
    public void objParam(Student student){
        System.out.println(student);
    }

 可以知道,我们在控制台是会打印出学生的具体信息的,

访问路径:http://localhost:8080/c1/param2?id=1&name=LYL&sex=man

2.1.2 测试结果

Spring MVC各种参数进行封装

        OK,确实是在控制台打印出来了,说明我们对对象类型进行封装的时候,只需要将他们的属性放在访问路径的参数里面即可 

2.2 关联对象

        要实现关联对象的封装,首先我们得先建一个Address地址类,然后在Student类里面新增一个Address类型的属性即可。如下:

Address: 

package com.example.domain;

public class Address {

    // 地址信息
    private String info;
    // 邮编
    private String postcode;

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public String getPostcode() {
        return postcode;
    }

    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }

    @Override
    public String toString() {
        return "Address[ " +
                "info='" + info + '\'' +
                ", postcode='" + postcode + '\'' +
                " ]";
    }
}

 记住修改Student类,如下:

package com.example.domain;

import java.util.List;
import java.util.Map;

public class Student {
    private int id;
    private String name;
    private String sex;
    // 地址对象
    private Address address;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                " ]";
    }
}

2.2.1 控制器方法

    // 获取关联对象类型参数
    @RequestMapping("c1/param3")
    public void objParam2(Student student){
        System.out.println(student);
    }

        访问该方法时,请求参数名和方法参数的属性名相同,即可完成自动封装。,因此我们可以将请求路径写成:http://localhost:8080/c1/param3?id=1&name=HQX&sex=woman&address.info=guangzhou&address.postcode=5201314

2.2.2 测试结果

Spring MVC各种参数进行封装

OK,可以很明显看到也是可以成功查询出来了。 

三、集合类型

        SpringMVC支持将参数封装为List或Map集合,下面演示一下封装为简单数据类型集合的写法。如下:

3.1 简单数据类型集合

3.1.1 控制方法

// 绑定简单数据类型List参数,参数前必须添加@RequestParam注解
    @RequestMapping("/c/param4")
    public void listParam(@RequestParam List<String> users){
        users.forEach(System.out::println);
    }

从代码可以看出这是访问之后会在控制台遍历这个集合。

访问路径如下: http://localhost:8080/c/param4?users=LYL&users=HQX

3.1.2 测试结果

Spring MVC各种参数进行封装

 OK,确实成功在控制台打印出来了。

3.2 对象数据类型集合

        SpringMVC不支持将参数封装为对象类型的List集合,但可以封装到有List属性的对象中。在这里我们得先在Student类添加一个集合对象。写法如下:

Student

package com.example.domain;

import java.util.List;
import java.util.Map;

public class Student {
    private int id;
    private String name;
    private String sex;

    // 地址集合List
    private List<Address> address;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public List<Address> getAddress() {
        return address;
    }

    public void setAddress(List<Address> address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                " ]";
    }
}

3.2.1 控制器方法

// 对象中包含集合属性
    @RequestMapping("c1/param6")
    public void listParam6(Student student){
        System.out.println(student);
    }

其实和上面得对象类型没什么不一样,主要是参数类型得属性不一样,访问路径不一样。 

访问路径:http://localhost:8080/c1/param6?id=1&name=LYL&sex=man&address[0].info=HQX&address[0].postcode=520&address[1].info=MVC&address[1].postcode=1314

3.2.2 测试结果

Spring MVC各种参数进行封装

 OK,也是可以成功查询出来的

3.3 Map集合

        同样,SpringMVC要封装Map集合,需要封装到有Map属性的对象中。修改Student实体类,写法如下:

Student

package com.example.domain;

import java.util.List;
import java.util.Map;

public class Student {
    private int id;
    private String name;
    private String sex;

    // 地址集合Map
    private Map<String,Address> address;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Map<String, Address> getAddress() {
        return address;
    }

    public void setAddress(Map<String, Address> address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                " ]";
    }
}

3.3.1 控制器方法

// 对象中包含Map属性
    @RequestMapping("c1/param7")
    public void mapParam(Student student){
        System.out.println(student);
    }

访问路径:

http://localhost:8080/c1/param7?id=1&name=LYL&sex=man&address[%27one%27].info=H&address[%27one%27].postcode=520&address[%27two%27].info=QX&address[%27two%27].postcode=1314]

3.3.2 测试结果 

Spring MVC各种参数进行封装

        OK,也是成功查出来了,至于第一条的two的info为什么为空是因为我写少了个']',所以才出现一丢丢小插曲,但是不影响我们继续输出。

往期专栏&文章相关导读 

     大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏 Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏 MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章 

Spring系列专栏 Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章  

SpringMVC系列专栏 Spring MVC简介附入门案例
Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
Spring MVC处理响应附案例详解
Spring MVC相关注解运用 —— 上篇

Spring MVC相关注解运用 —— 中篇文章来源地址https://www.toymoban.com/news/detail-493162.html

Spring MVC相关注解运用 —— 下篇
Spring MVC多种情况下的文件上传
Spring MVC异步上传、跨服务器上传和文件下载
Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
Spring MVC拦截器和跨域请求
SSM整合案例【C站讲解最详细流程的案例】

到了这里,关于Spring MVC各种参数进行封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC 参数接收

    Springmvc中,接收页面提交的数据是通过方法形参来接收: 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据 编写controller 在

    2024年01月23日
    浏览(45)
  • servlet -> spring-mvc -> spring-boot-> spring-security目录

    springMVC 启动源码 spring-boot注册servlet 3.多种方式注册servlet spring-boot自动注入DispatchServlet spring-security核心配置解读(粗) spring-security源码解读(新)

    2024年02月09日
    浏览(43)
  • Spring MVC 请求参数绑定

    Spring MVC 是一个用于构建 Web 应用程序的框架,它提供了一种方便的方式来处理 HTTP 请求和响应。在 Spring MVC 中,请求参数绑定是将 HTTP 请求中的参数映射到控制器方法的参数上的过程。Spring MVC 提供了多种方式来实现请求参数绑定。 请求参数绑定:说⽩了SpringMVC如何接收请求

    2024年02月07日
    浏览(40)
  • 【Spring MVC学习】连接 && 接收请求参数 && 响应返回参数

    目录 前言:认识Spring MVC 🌷1、什么是MVC? 一、建立连接(5个注解) 🌷1、@RequestMapping注解:注册接⼝的路由映射(默认返回页面) 🌷2、@ResponseBody注解:表示返回的是数据 🌷 3、组合注解@RestController = @ResponseBody + @Controller 🌷4、支持Get请求的2种写法@GetMapping + @RequestMapp

    2024年02月16日
    浏览(39)
  • 3.5 Spring MVC参数传递

    Spring MVC的Controller接收请求参数的方式有多种,本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式,同时解决POST请求中文乱码问题。 基本数据类型以及他们的包装类。 JSON格式采用键值对的方式来表示数据,由花括号 {} 包含对

    2024年02月13日
    浏览(43)
  • Spring MVC: 请求参数的获取

    在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调用相应的处理器 Controller 。那么,处理器 Controller 具体是如何实现获取请求参数的呢?

    2024年02月10日
    浏览(43)
  • 案例13 Spring MVC参数传递案例

    基于Spring MVC实现HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON方式的参数传递。 选择Maven快速构建web项目,项目名称为case13-springmvc02。 ​ src.main路径下,执行new – Directory操作,选择java、resources后,执行回车键。 ​ 在web.xml中配置DispatcherServlet。 src.main.java.

    2024年02月13日
    浏览(47)
  • Spring MVC:常用参数(注解)的使用和参数绑定的验证

    Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)(第2版) Spring MVC常用参数 Spring MVC简单应用 Spring MVC参数绑定 本实验采用的是本地安装的tomcat8.5.0版本 (1)创建maven 管理的java web工程 (2)添加本地tomcat war包 (3)实验过程 输出Hello Word 访问端口:http://localhost:8080/chapter1

    2024年02月04日
    浏览(42)
  • Spring Mvc请求处理过程分析 --- 参数解析

    调试示例基于注解@RequestBody,请求的入参是json格式的请求,本文主要分析spring解析请求参数的过程。 InvocableHandlerMethod的getMethodArgumentValues方法,会解析请求参数。 在上面的代码中:args[i] = this.resolvers.resolveArgument(parameter, mavContainer, request, this.dataBinderFactory);完成对参数的解析

    2024年02月02日
    浏览(46)
  • 38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

    ▲ 默认的四个静态资源目录: /META-INF/resources /resources /static /public ▲ ResourceProperties.java类的源代码,可看到CLASSPATH_RESOURCE_LOCATIONS常量的定义: CLASSPATH_RESOURCE_LOCATIONS = new String[]{“classpath:/META-INF/resources/”, “classpath:/resources/”, “classpath:/static/”, “classpath:/public/”}; 这意味

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包